Thief of Wealth

1. 인자 표현식을 계산한다.

2. 함수의 매개변수와 변수를 저장할 수 있는 충분한 크기의 활성 객체를 생성한다.

3. 호출된 함수 객체에 대한 참조를 새로운 활성 객체에 저장한다.

4. 전달 받은 인자를 새로운 활성 객체의 매개변수에 저장한다. 빠진 인자는 undefined로 간주한다. 남는 인자는 버린다.

5. 활성 객체의 모든 변수 값을 undefined로 지정한다.

6. 함수 호출 명령어의 바로 다음 명령어를 활성 객체의 다음 명령어 필드 값으로 지정한다.

7. 새로운 활성 객체의 호출자 필드 값에 현재 활성 객체를 지정한다. 이것은 실제 호출 스택이 아니라 활성 객체의 연결된 목록이다.

8. 새로운 활성 객체를 현재 활성 객체로 지정한다.

9. 호출된 함수를 실행한다.

 

--- 최적화 후 (꼬리 물기 최적화 등 후)

1. 인자 표현식을 계산한다.

2. 현재 활성 객체가 충분히 크다면

    1) 현재 활성 객체를 새로운 활성 객체로 사용한다.

    2) 그렇지 않다면 함수 매개변수와 변수를 저장할 수 있는 충분한 크기의 활성 객체를 만듭니다.

    3) 새로운 활성 객체의 호출자(caller) 필드 값에 현재 활성 객체를 지정한다.

    4) 새로운 활성 객체를 현재 활성 객체로 지정한다.

3. 호출된 함수 객체에 대한 참조를 새로운 활성 객체에 저장한다.

4. 전달 받은 인자를 새로운 활성 객체의 매개변수에 저장한다. 빠진 인자는 undefined로 간주하고 남는 인자는 버린다.

5. 활성 객체의 모든 변수 값을 undefined로 지정한다.

6. 호출된 함수를 실행한다.

 

 

 

 

 

profile on loading

Loading...