Сообщение от Dmitry A. Soshnikov
|
в спецификации сказано, что [[Scope]] записывается в функцию однозначно при её создании
|
Спецификация она, того..., не очень однозначно толкуется :
Может он-то и записывается , но записывается ссылка на него, но его содержимое ... , короче, вот :
var a = 10;
function b() {
var c = 20;
function d() {
var e = 30; al( e+c+a);
};
// Замыкаем на savB
var savB=d; // Scope Chain (b) === [[Scope]](d) Зачем Здесь хранить Scope Chain (b) ?
savB(); // 60
c=0; // Если бы VO(b) законсервировался при замыкании, то это изменение
// не оказало бы воздействия на последующий вызов через Замыкание:
savB(); // 40 <- Scope Chain (b), т.е. VO(b) - не законсервировался
return savB;
};
var s=b();
s(); //40 <- Scope Chain (b), т.е. VO(b) - Законсервировался, но Global - нет.