let x = 30;
function get () {
return x;
}
let result = get(20);
get 함수는 x를 반환하고, 이때의 x는 get 함수 스코프 내에 x 변수가 별도로 선언되어 있지 않기 때문에 전역스코프의 x
따라서 result 에는 30이 할당된다.
get(20)에서 20은 사용되지 않는 값
let x = 30;
function get (x) {
return x;
}
let result = get(20);
get 함수가 반환하는 x 는 전역스코프의 x가 아닌, get 함수에 별도 선언된 매개변수 x
따라서 result는 30이 아닌 get 함수의 전달인자 20
let x = 30;
function get () { return x; }
function set (value) { let x = value; }
set(10);
let result = get(20);
get 함수는 전역에 선언된 x를 반환하고,
set 함수는 value를 통해 받은 값을 x에 할당. (set 함수 내에서 별도로 선언된 x)
따라서 set(10)을 해도 전역의 x는 여전히 30
let x = 30;
function get () { return x; }
function set (value) { x = value; }
set(10);
let result = get(20);
답은 10.
set 함수는 value에서 받은 값을 전역 변수 x에 할당한다.
즉 set(10)이 실행되면 x의 값이 30에서 10으로 변경된다
get(20)의 20은 result 값에 아무런 영향을 미치지 않는다.
let x = 30;
function get (x) { return x; }
function set (value) { x = value; }
set(10);
let result = get(20);
get 함수가 전달된 20을 반환하므로 답은 20.
set(10)은 전역변수의 x값을 바꿈
let x = 10;
function add (y) {
return x + y;
}
function strangeAdd (x) {
return add(x) + add(x);
}
let result = strangeAdd(5);
strangeAdd 함수는 매개변수 x를 통해 전달받은 값을 다시 add 함수에 전달하는 구조
add 함수는 매개변수 y를 통해 받은 값을 전역에 선언된 x 와 더해서 반환
strangeAdd(5) 는 add(5) + add(5) 이고
add(5) 는 x + 5 이며 이때x는 전역에 선언된 10 이므로 15
따라서 15 + 15 한 30이 답이다.
let x = 10;
function outer () {
let x = 20;
function inner () {
return x;
}
return inner();
}
let result = outer();
outer 함수에는 20을 값으로하는 x와 inner 함수가 있고
outer 함수가 실행되면 inner함수를 실행시킨 값을 반환한다
inner 함수는 x를 반환하는데 inner 함수에는 x 값이 없으므로 바로 위의 함수에서 가져오게 된다
따라서 result 는 20 (안쪽 스코프부터 바깥스코프로 순차적인 스코프 체이닝 발생)
let x = 10;
function outer () {
let x = 20;
function inner () {
x = x + 10;
return x;
}
inner();
}
outer();
let result = x;
outer 함수 실행 -> inner 함수 호출되어 x값이 30이 됨.
하지만 이 값은 outer 함수 스코프 내 변수 x 값이 30으로 바뀐 것일 뿐
결과 값에 할당된 것은 전역스코프의 x 이므로 outer 함수가 호출되어도 아무런 영향을 받지 않는다.
따라서 답은 10
let x = 10;
function outer () {
x = 20;
function inner () {
let x
x = x + 20;
return x;
}
inner();
}
outer();
let result = x;
outer 함수내에서 전역변수 x 를 20으로 바꿈
outer 함수가 inner 함수를 실행시켜 inner 함수 내에 있는 x 값이 40으로 바뀌긴 하지만,
이것은 inner 함수 스코프 내의 변수값일 뿐 전역변수엔 영향을 미치지 않는다.
따라서 답은 20
let x = 10;
function outer () {
x = 20;
function inner () {
x = x + 20;
}
inner();
}
outer();
let result = x;
outer inner 함수모두 전역의 선언된 X값은 변경하게 됨
따라서 20 + 20 = 40이 답