Показать сообщение отдельно
  #7 (permalink)  
Старый 03.09.2011, 11:16
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

devote Может показаться что функции работают следующим образом, когда функции нужно сделать
чтото с переменной то она попробует найти эту переменную внутри себя, внутри своей области видимости
и если она не находит нужную переменную то она обращается к глобальной области видимости. Но это не так.

На самом деле функции при поиске нужных переменных просто поднимаются вверх по областям видимости
родительских функций (ох загнул )

К примеру код:

var a = 'Я глобальная переменная A';
var b = 'Я глобальная переменная B';

function first () {
  var a = 'Я переменная A обьявленная в функции first';
  
  function second () {
	alert(a);
	alert(b);
  }
  second();
}
first();


При запуске функции second первому алерту нужна переменная А но ее нету внутри функции, поэтому функция
попробует найти эту переменную в родительской функции, тоесть в функции first. Здесь эта переменная есть.
А при запуске второго алерта функция попробует найти переменную B в родительской функции(first) но там ее нету,
поэтому нужно подниматься еще выше, а выше глобальная область видимости.

Поэтому сколько у функции есть родительских функций, столько она и будет подниматься в поисках нужно переменной.
Это очень похоже на всплытие событий.
Ответить с цитированием