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]] функции --> спецобъект*, глобальный объект
Или я здесь не до конца понял?
Как всегда, спасибо за подробные разъяснения =)