바와 같이 다음 단계는 제어 함수 오브젝트 F, thisArg 제공된 호출자 에 포함되는 기능 코드의 실행 컨텍스트 및 argumentsList 제공된 호출자 진입 할 때 수행 sec 10.4.3변수/어휘 환경
했다 :
- 기능 코드가 strict 코드 인 경우 thisBinding을 thisArg로 설정하십시오.
- 그렇지 않으면 thisArg가 null이거나 정의되지 않은 경우 ThisBinding을 전역 객체로 설정하십시오.
- 그렇지 않으면 Type (thisArg)이 Object가 아닌 경우 ThisBinding을 ToObject (thisArg)로 설정하십시오.
- 다른 사람은 this 바인딩을 thisArg로 설정합니다.
- LocalEnv를 NewDeclarativeEnvironment를 호출 한 결과로 지정하고 F의 [Scope]] 내부 속성 값을 인수로 전달합니다.
- LexicalEnvironment를 localEnv로 설정하십시오.
- VariableEnvironment를 localEnv로 설정하십시오.
- 코드를 F의 [[코드]] 내부 속성 값으로 지정하십시오.
- 10.5에서 설명한대로 함수 코드 code 및 argumentsList를 사용하여 선언 바인딩 바인딩을 수행합니다. 우리의 기능
- 코드
thisArg
가 null 따라서,ThisBinding
하는 엄격한 코드를 밤은 : 우리는 다음이 따라서function foo(){ var a={p:'p'}; o={c:'c'}; }
:
는 다음 코드를 고려 전역 개체로 설정
environment record
은 [[Scope]]
으로 표시됩니다.LexicalEnvironment
instatiation 바인딩 선언문 수행 단계 5.VariableEnvironment
.8 단계에서 바인딩은 VariableEnvironment에 만들어 지지만 LexicalEnvironment에는 만들어지지 않습니다. 그러나 sec 10.3에서 실행 컨텍스트가 LexicalEnvironment 및 VariableEnvironment 성분을 생성
초기에 동일한 값을 가지고있다.
질문 : 실행 컨텍스트 LexicalEnvironment 및 VariableEnvironment의 생성은 여전히 위 내 경우에는 동일 직후 왜
?
질문을 이해할 수 있을지 잘 모르겠습니다. 'LexicalEnvironment'와'VariableEnvironment'는 6과 7에 할당 된 동일한 값을 갖습니다. –
@Felix Kling 컨텍스트 생성의 8 단계에서 코드에 선언 된 변수와 함수가 VariableEnvironment의 환경 레코드에서 바인딩으로 추가됩니다. 그러나 LexicalEnvironment는 어떻습니까? 이 바인딩이 8 단계에서 LexicalEnvironment에 추가됩니까? 그리고 특정 사례에서 기능의 내부 속성은 무엇입니까? –
좋은 질문입니다. 나는 그것이 객체와 비슷하다고 가정 할 것이다 : LexicalEnvironment와 VariableEnvironment는 동일한 환경을 참조하므로, 그 환경에 대한 모든 변경은 두 컴포넌트를 통해 볼 수있다. 예제에서 전역 범위에서 함수를 정의했기 때문에'[[Scope]]'는 전역 실행 컨텍스트의 어휘 환경을 참조합니다. http://www.ecma-international.org/ecma-262/5.1/#sec-13 –