Показать сообщение отдельно
  #58 (permalink)  
Старый 16.04.2009, 17:33
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Сообщение от 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 - нет.
Ответить с цитированием