Der folgende Code:
function a() {
console.log('1')
}
(function() {
console.log(a);
if(1) {
function a() {
console.log('2');
}
}
})()
Nach dem Ausführen ist die Ausgabe undefiniert.
Nach dem Entfernen der if-Bedingung ist die Ausgabe die zweite a-Funktion
function a() {
console.log('1')
}
(function() {
console.log(a);
// if(1) {
function a() {
console.log(2);
}
// }
})()
Da ich weiß, dass die Funktion verbessert wurde, wird im zweiten Teil des Codes eine Funktion vor dem Code console.log(a) heraufgestuft, sodass im zweiten Teil eine Funktion ausgeführt und ausgegeben wird.
Aber im ersten Teil des Codes verstehe ich nicht, warum undefiniert ausgegeben wird.
条件式函数声明跟函数表达式的处理方式一样。因此,条件式函数声明丧失了函数声明提升的特性。
参考网址:/q/10...
在 if else 语句中使用 function 关键字进行函数声明时,变量的提升在不同浏览器中是不一样的。只是这里刚好是提升了个变量的声明,去掉了 if else 就成了单纯的函数作用域。
你的IIFE中的
是个函数表达式,而不是函数声明,当 去掉if的时候是函数声明,没有去掉if ,conosle.log(a),a表示未定义的变量a,参考https://developer.mozilla.org...