Это одна из самых запутанных частей в 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. Глобальная область.

Примечание. Внутренняя функция содержит область действия родительской функции, даже если родительская функция вернула значение.