JavaScript에서 함수의 외부 변수 접근

다음 코드를 살펴보겠습니다:

javascriptlet num = 1; // 변수 값 설정

function func() {
  console.log(num); // 콘솔에 출력
}

func(); // 함수 호출

이전에 언급한 바와 같이, 변수 값은 함수 정의 앞에 있을 필요는 없지만, 함수 호출 전에 위치해야 합니다:

javascriptfunction func() {
  console.log(num);
}

let num = 1;
func();

사실 이 설명은 완전히 정확하지 않습니다. 우리 함수는 호출되기 전에도 변수 num의 값을 알고 있습니다:

javascriptlet num = 1;

function func() {
  console.log(num); // 함수는 이미 num = 1임을 알고 있음
}

다음은 더 복잡한 예제입니다:

javascriptlet num = 1; // 이 시점에 함수는 num = 1임을 인지함

function func() {
  console.log(num);
}

num = 2; // 이 시점에 함수는 num = 2임을 인지함

함수 호출을 추가해 보겠습니다:

javascriptlet num = 1; // 이 시점에 함수는 num = 1임을 인지함
func(); // 1 출력

function func() {
  console.log(num);
}

func(); // 1 출력
num = 2; // 이 시점에 함수는 num = 2임을 인지함
func(); // 2 출력

다시 한번 강조합니다: 사실 함수는 호출되지 않았더라도 외부 변수의 값을 알고 있습니다.