Тема: тест
Показать сообщение отдельно
  #36 (permalink)  
Старый 08.10.2008, 23:50
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Zeroglif,

Т.е. [[scope]] - это набор объектов, которые уже однозначно прописаны при создании функции. Эти объекты (родительские varibale object'ы и (возможные) спецобъекты) всегда будут приплюсованы к varible object'у функции в момент вызова. И в сумме, это и есть Scope функции, так?

Scope = variable object + [[scope]]

1. function F() {}; // создание

Функция F получила внутреннее свойство [[scope]] (по определению "[[scope]] - A scope chain that defines the environment in which a Function object is executed.") - в котором функция запущена - явно указывается, что это нечто родительское, поскольку сама функция находится в этом нечто. Или не правильная трактовка?

2. F(); // вызов

Для функци F динамически создается Scope (настоящий скоп чейн), который, как было сказано выше, состоит из variable object'a (это будет первый элемент Scope'a) и [[scope]]'a.

Сообщение от Zeroglif
спецобъект принудительно добавляется к Scope только на момент создания именованной FE
И этот спецобъект создается только для именованной FE (чтобы иметь возможность обратиться из самой FE по имени). Для анонимных же FE данный спецобъект не заводится и обращение внутри FE возможно лишь через argumetns.callee. Я правильно уловил?

Сообщение от Zeroglif
спецобъект принудительно добавляется к Scope только на момент создания именованной FE
Scope .... на момент создания. Или [[scope]]? Только что я понял, что окончательный Scope (если так можно сказать) - скоп, в котором будет производится поиск, будет определен в момент вызова, а не создания. В момент создания Scope вообще получается не нужен. Да и в примере спецобъект находится в [[scope]]:

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

Или я здесь не до конца понял?

Как всегда, спасибо за подробные разъяснения =)
__________________
Тонкости ECMAScript
Ответить с цитированием