어떤 변수가 사용될까요?
중요도: 5
아래 makeWorker
함수는 내부에서 다른 함수를 만들고 해당 함수를 반환합니다. 반환된 새 함수는 다른 어딘가에서 호출할 수 있습니다.
새롭게 반환된 함수는 생성된 곳을 기억하고 그곳의 외부 변수에 접근할까요, 아니면 호출된 위치를 기준으로 외부 변수에 접근할까요? 아니면 둘 다일까요?
function makeWorker() {
let name = "Pete";
return function () {
alert(name);
};
}
let name = "John";
// 함수를 만듭니다.
let work = makeWorker();
// 함수를 호출합니다.
work(); // 무엇이 나올까요?
“Pete”, “John” 중 어떤 어떤 값이 출력될까요?
정답은 Pete입니다.
work()
함수는 만들어진 곳을 기준으로 외부 렉시컬 변수 참조를 통해 name
을 가져옵니다.
그래서 결과는 "Pete"
입니다.
만약 makeWorker()
함수 내부에 let name
가 없었다면 바로 전역 스코프에 해당하는 외부에서 변수를 검색해서 "John"
이 출력되었을 겁니다.