В 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