함께 따라 가 보자.
• 자바스크립트 엔진은 전역 환경(EnvObject1)을 만들고 바인딩 x, f, example을 여기에 추가한다.
• example 함수를 생성하고 example의 저장된 환경 링크를 현재 환경(전역 환경인 EnvObject1)에 설정하고 example 바인딩의 값을 함수에 설정한다.
• let x = 1;을 실행한다. x를 1로 설정한다.
• const f = example(); 줄을 실행한다.
- EnvObject2라는 새 환경 객체를 생성하고 외부 환경을 example의 저장된 환경 (EnvObject1)으로 설정한다.
- 해당 환경 객체에 y라는 바인딩을 만든다.
- const y = 2; 줄을 실행한다. y를 2로 설정한다.
- 현재 환경(example 호출을 위한 EnvObject2)을 저장된 환경으로 설정하여 함수를 생성한다.
- 호출에서 함수를 반환한다.
- 함수를 f에 할당한다.
• 마지막으로 엔진은 f();줄을 실행한다. 함수 f를 호출한다는 것은 다음을 의미한다.
- 호출에 대한 새 환경 객체(EnvObject3)를 만들고, 해당 외부 환경을 함수의 저장된 환경(EnvObject2, 이전 example 호출에서 가져온 환경)으로 설정하고, 여기에 z 바인딩을 만든다.
- z를 3으로 설정한다.
- console.log 줄을 실행한다.