Почему функция не видна за пределами функции?

В строгом режиме у функции появляется блочная область видимости. Без строгого режима функция видна везде. Например:


Почему же тогда здесь без строгого режима функция не видна? Выводится ошибка - funcInner is not defined.


Получается, что у функции есть еще функциональная область видимости?
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
IonDen
@IonDen
JavaScript developer. IonDen.com
В ES5 нельзя было задать блочную область видимости.
if (true) {
  var foo = 'bar';
}

console.log(foo); // bar


В ES6 такая возможность появилась, но не для всех, а только для новых переменных
if (true) {
  var foo = 'bar';
  let baz = 'biz';
  const alpha = 'beta';
}

console.log(foo); // bar
console.log(baz); // ReferenceError: baz is not defined
console.log(alpha); // ReferenceError: alpha is not defined


По этому если вы присвоите функцию одной из переменных const/let то вы добьетесь того же эффекта:
if (true) {
  const foo = () => {};
}

console.log(foo); // ReferenceError: foo is not defined


Функциональная область видимости существовала всегда
function foo () {
  function bar() {}
}

console.log(bar); // ReferenceError: bar is not defined
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект