돌아가기

어떤 변수가 사용될까요?

중요도: 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"이 출력되었을 겁니다.