클로저는 언제 봐도 어렵다..
let x = 30;
function get () {
return x;
}
let result = get(20);
마지막 result 부분에서는 인자가 들어가있는데 왜 함수 바디 부분에서는 안 들어가있지? 했는데 다시 생각해보니 함수 실행 시에는 20이라는 값이 무시되고 전역에 선언된 30이라는 값이 들어간 후 리턴이 되는 것이다.
let x = 30;
function get () { return x; }
function set (value) { let x = value; }
set(10);
let result = get(20);
------------------------------------------
let x = 30;
function get () { return x; }
function set (value) { x = value; }
set(10);
let result = get(20);
가장 헷갈렸던 두 코드인데
우선 첫번째는 set(10)
이 실행되면 스코프 내에서 x가 10으로 할당이 되는데 이 10이라는 값은 set 함수 내에서만 유효하기 때문에 전역에서의 x값은 30이다.
그리고 나서 get(20)
이 실행되는데 get 함수 구현 부분에서는 인자를 받지 않기 때문에 20은 무시되고 30
이 나오게 된다.
두번째는 첫번째와 비슷하긴 하지만 set 함수 스코프 내에서 전역에 있던 x값이 10으로 변경된다.