Это одна из самых запутанных частей в Javascript, я попытаюсь немного объяснить и прояснить ситуацию.
Scope = Life time , Доступность переменных.
Функции Javascript имеют лексическую область действия. Они выполняются в той области, в которой они определены, но не в той области, в которой они выполняются.
Во вложенных функциях внутренняя функция может обращаться к переменным внешней функции (родительская функция — область действия). Это означает, что дочерние функции лексически связаны с контекстом выполнения своих родителей.
function outerFunction () { var a = 10; console.log("Outer function - ", a,b,c); // B, C are undefined function innerFunction () { var b = 20; console.log("Inner function - ", a,b,c); // C is undefined function deepInnerFunction () { var c = 30; console.log("Deep inner function - ", a,b,c); // 10,20,30 } return deepInnerFunction; } return innerFunction; } outerFunction()()();
Если мы рассмотрим приведенный выше пример, ясно видно, что
1. deepInnerFunction (вложенная дочерняя функция) может получить доступ к переменным, определенным в родительских функциях (внутренняя, внешняя).
2. innerFunction может получить доступ к материалам родительской функции, но не к материалам внутри дочерних функций. function
3. outerFunction может получить доступ только к материалам, определенным в его области, но не к данным внутри внутреннего, deepInner.
Другими названиями лексической области видимости являются статическая область видимости, замыкание.
deepInnerFunction —может получить доступ к переменным, определенным в
1. Собственная область (область функционального уровня)
2. Родительская область (лексическая область)
3. Глобальная область.
Примечание. Внутренняя функция содержит область действия родительской функции, даже если родительская функция вернула значение.