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) но там ее нету,
поэтому нужно подниматься еще выше, а выше глобальная область видимости.
Поэтому сколько у функции есть родительских функций, столько она и будет подниматься в поисках нужно переменной.
Это очень похоже на всплытие событий.