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

Сообщение от Dmitry A. Soshnikov
Физически же, эта абстракция представлена AO (для функции и eval'a) и Global - для Global'a.
Ещё поправка - eval берёт VO того контекста, в котором он запущен: если из функции - AO, если из Global - Global.

Сообщение от kefi
а сохраняется ли [[Scope]] (d), если функция d не содержит переменных из своего [[Scope]],
Да, сохраняется.

function a() {
  var b = 10;
  function c() {
    function d() {
      alert(b);
    }
  }
}


Функция "с" не использует переменные из внешнего VO (ещё говорят: не имеет свободных переменных). Однако, функция "d" - использует. И черпает из Scope, частью которого является [[Scope]] (т.е. Scope вышестоящего контекста). Для "d", [[Scope]] - это Scope(c), и если в "c" не будет ссылки на вышестоящий контекст (где находится "b"), "d" не увидит "b".
__________________
Тонкости ECMAScript

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