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

Сообщение от kefi
И как это все Вы поняли из ECMA спецификации , ума не приложу ...
Несомненно, стоит отметить этого человека - изначально, он помог мне поднять некоторые глубокие аспекты ("Этот человек", только ни в коем случае не считай это за лесть =) я просто благодарен и отдаю должное ). Углубляясь, изучая, дальше сам уже стандарт проштудировал (что и всем советую для профессионального понимания JavaScript).

Сообщение от kefi
Кстати контекст, как я сейчас понимаю, не является термином обозначающим некий объект, это чисто лексический контекст для текста функции или какого-ни слова из кода программы ?
Да, это абстракное определение, зависящее от типа кода: Global code, Eval code, Function code.

Сообщение от kefi
Вот правда, еще остается непонятной роль AO - вроде как и нни к чему он
AO - это и есть VO. А VO, в свою очередь, можно тоже считать абстракцией. Физически же, эта абстракция представлена AO (для функции и eval'a) и Global - для Global'a. У Global'a нет arguments, поэтому для функции это назвали AO. Если говорить отстраннённо от JS, можно представить VO - как интерфейс, а AO и Global - как конкретные классы, реализующие этот интерфейс.

Сообщение от kefi
да еще какой-то непонятныйц остается спец объект
Спец.объект - "анонимный объект", который содержит одно единственное свойство - опциональное имя FE, чтобы FE могла обратиться к себе рекрсивно по имени (помимо arguments.callee):

(function fn() {alert(fn);})();


Откуда alert(fn) выдаёт правильное значение, если FE не воздействуют на VO? Идентификатор fn не должен был попасть в VO(Global). Где же FE его находит? Специально для этого перед созданием FE создаётся этот спец. объект и кладётся в scope chain (в данном случае Global):

Scope(Global).{}.fn = <reference to FE "fn">


Дальше, когда создалась FE "fn", этот спец. объект удаляется из Scope(Global) - теперь он есть в [[Scope]](fn) и, соотвественно, может быть найден.

Здесь ещё можно почитать.

Сообщение от kefi
- именно на [[Scope]] , т.е. БЕЗ VO функции d ?
update: VO и Scope создаются каждый раз при вызове функции; запоминается только [[Scope]](d).

Сообщение от kefi
- и сохраняются не просто , если возвращается return, как в Вашем примере b() , а если возвращаемое где-то сохранено var q=b()
Да, конечно, это тоже подразумевалось.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 16.04.2009 в 15:57.
Ответить с цитированием