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

Пример:

var a = 10;
function b() {
  var c = 20;
  function d() {
    var e = 30;
    alert([a, c, e, f]);
    f++;
    e++;
  }
  eval('var f = 40;');
  d();
  c++;
  return d;
}
b()();


Видно, что "e++" не имеет смысла, т.к. "e" определяется каждый раз в VO(d), однако, "f++", "c++" "eval('var f = 40;');" - воздействуют на VO(b), и, второй вызов "d" (через b()()) даёт это понять.

Кстати, обратите ещё раз на то, что такое замыкание (например, на b()()). Обратите, закрепите, и не надо больше приравнивать это лишь к "переменной-ссылке на FE".

Сообщение от kefi
ответа на несколько раз поставленный вопрос тоже не дают
Дело в вопросе. Уверен, после примеров неясности отпадут (ну, или, во всяком случае, их станет меньше).

update: а, уже выше есть пример.
__________________
Тонкости ECMAScript

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