Тема: тест
Показать сообщение отдельно
  #35 (permalink)  
Старый 08.10.2008, 16:42
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Scope - это цепь объектов, опрашиваемых при вычислении идентификатора (scope chain), а [[Scope]] - это "закладка" на объекты, которые войдут в будущем (при исполнении функции) в состав Scope. Возьмём обыкновенную FunctionDeclaration, стоящую лексически в глобальном коде.

В момент её создания (при исполнении глобального кода):

- контекст исполнения --> контекст исполнения глобального кода
- Scope (scope chain) --> глобальный объект
- [[Scope]] функции --> глобальный объект

В момент вызова функции:

- контекст исполнения --> контекст исполнения функции
- Scope (scope chain) --> Variable object, глобальный объект
- [[Scope]] функции --> глобальный объект

Возьмём именованную FunctionExpresion там же, в глобальном коде:

В момент её создания (при исполнении глобального кода):

- контекст исполнения --> контекст исполнения глобального кода
- Scope (scope chain) --> глобальный объект
- [[Scope]] функции --> спецобъект*, глобальный объект

В момент вызова функции:

- контекст исполнения --> контекст исполнения функции
- Scope (scope chain) --> Variable object, спецобъект, глобальный объект
- [[Scope]] функции --> спецобъект*, глобальный объект

* спецобъект принудительно добавляется к Scope только на момент создания именованной FE исключительно для наполнения [[Scope]], после создания функции Scope возвращается к своему первоначальному состоянию, чтобы спецобъект не влиял на другие функции...
Ответить с цитированием