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

Сообщение от kefi
Может он-то и записывается , но записывается ссылка на него
Да, это динамическая цепь (есть ещё и статическая; подробней, можно в вики почитать). Найденное в Scope chain значение, всегда будет последним присвоенным (связанным) значением этой переменной. Чтобы это предотвратить (а такие случаи бывают нужны - например, при замыкании счетчика цикла) - создают новую функцию с новым VO - т.е. передают нужное значение (счетчик цикла) параметром в создаваемую функцию.

Сообщение от kefi
// Замыкаем на savB var savB=d;
Просто ссылка. d - уже замыкание.

Сообщение от kefi
Зачем Здесь хранить Scope Chain (b)
Ну а как? - в "d" есть свободные переменные.

Сообщение от kefi
Если бы VO(b) законсервировался при замыкании,
Здесь динамический scope chain, представляющий из себя стек (т.е. найдётся последнее присвоенное значение первого совпавшего имени переменной, начиная с вершины этого стека, т.е. с VO). Поэтому, ничего здесь не "консервируется", как в статическом лексическом контексте.

Сообщение от kefi
//40 <- Scope Chain (b), т.е. VO(b) - Законсервировался, но Global - нет.
Ничего не "законсервировалось" (снова - динамический Scope): "c" имеет правильное, последнее присвоенное, значение - 0, "а" - правильное, последнее, единожды присвоенное, значение - 10.

Сообщение от Zeroglif
Запросто.
Да, теоретически, и по логике вещей, конечно должны. Но, спецификация этого не отмечает. А точно узнать - можно лишь, проанализировав исходники реализаций.
__________________
Тонкости ECMAScript

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