Показать сообщение отдельно
  #5 (permalink)  
Старый 17.03.2012, 11:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Ssipak Посмотреть сообщение
Доброго времени суток!
Столкнулся проблемой, чтобы было понятнее, убрал всё лишнее.
(function() {
  var a=1;
  (function(){
    alert(a); // Ожидал получить 1, выводит "undefined"
    var a=2;
    (function(){
      alert(a); // Выведет 2.
    })();
  })();
  alert(a); // Выведет 1.
}) ();

Требуется, чтобы внутренняя переменная локальной для функии, в которой она определена.
Ожидал, что до определения внутренней переменной будет видна внешняя, но, судя по всему, если в функции определена локальная переменная в любой позиции (хоть в конце функции), то другие одноименные переменные из внешней области видимости недоступны.
Понимаю, что происходит, понимаю, как обойти, не понимаю, почему именно так. Буду признателен, если получу ссылку на статью, где упоминается этот нюанс.
Извините, но перекрытие глобальных переменных глобальными даже в школе проходят (Паскаль, процедуры и функции).

Раньше можно было добраться до верхней области видимости с помощью свойства __parent__, но сейчас оно удалено.Так что - никак.
Ответить с цитированием