더북(TheBook)

이 시점에서 자바스크립트 엔진은 다음 루프 반복을 위한 준비가 되었다.

10. CallEnvObject를 외부 환경으로 사용하여 새로운 환경 객체(LoopEnvObject2)를 생성한다.

11. 3단계의 바인딩 목록을 사용하여 LoopEnvObject2에 카운터에 대한 바인딩을 만들고 해당 값을 LoopEnvObject1에 있는 카운터의 현재 값(이 경우 1)으로 설정한다.

12. LoopEnvObject2를 현재 환경 객체로 설정한다.

13. for 루프의 “증가” 부분(++counter)을 수행한다. 증가하는 counter는 현재 환경 객체인 LoopEnvObject2에 있는 카운터다. 값이 1이므로 2가 된다.

14. for 루프를 계속한다. 조건이 참이므로 두 번째 타이머 함수(timerFunction2)를 생성하여 루프 본문을 실행하고 LoopEnvObject2에 대한 참조를 제공하여 그 안의 정보를 감싼다.

15. timerFunction2에 대한 참조를 전달하는 setTimeout을 호출한다.

보다시피 두 타이머 함수는 counter의 다른 사본을 다른 환경 객체에서 감싼다. 첫 번째는 여전히 counter = 1이다. 두 번째 것은 counter = 2이다. 이 시점에서 메모리는 그림 2-6과 같다.

▲ 그림 2-6

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.