«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Можете ли вы объявлять функции внутри условных операторов в JavaScript?

Можете ли вы объявлять функции внутри условных операторов в JavaScript?

Опубликовано 18 ноября 2024 г.
Просматривать:166

Can You Declare Functions Inside Conditional Statements in JavaScript?

Объявления функций в условных операторах

В JavaScript объявления функций ведут себя по-разному в зависимости от преобладающего стандарта языка и среды, в которой они выполняются.

В строгом режиме (ES5)

В строгом режиме, представленном в ECMAScript 5 (ES5) объявления функций не допускаются в условных операторах. Это связано с тем, что объявления функций создают поднятые переменные, область действия которых распространяется на всю функцию или глобальную область видимости. Размещение их внутри условного оператора нарушит этот механизм подъема.

Нестрогий режим (ES5)

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

В современном JavaScript (ES2015)

По состоянию на 2018 год большинство современных браузеров поддержка ECMAScript 2015 (ES2015), который ввел более строгую интерпретацию объявлений функций внутри блоков. В ES2015 область действия объявлений функций ограничена блоком, в котором они объявлены.

Пример:

Рассмотрите следующий код:

var abc = '';
if (1 === 0) {
  function a() {
    abc = 7;
  }
} else if ('a' === 'a') {
  function a() {
    abc = 19;
  }
} else if ('foo' === 'bar') {
  function a() {
    abc = 'foo';
  }
}
a();
document.write(abc); //writes "foo" even though 'foo' !== 'bar'

В строгом режиме или в ES2015 этот код приведет к ошибке, поскольку функция a не определена в глобальной области видимости. Однако в нестрогом режиме он может выдавать разные выходные данные в зависимости от реализации. В приведенном примере Chrome выводит «foo», а Firefox — «19».

Рекомендация:

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3