Сообщение от 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
|
Запросто.
|
Да, теоретически, и по логике вещей, конечно должны. Но, спецификация этого не отмечает. А точно узнать - можно лишь, проанализировав исходники реализаций.