猿问

有大佬遇到过这个问题吗:请教声明提升问题,怎么理解这个 fn() 的执行结果呢?

functiona(){
console.log(1);
}
functionfn(){
a();
if(false){
functiona(){
console.log(2);
}
}
}
fn();//aisnotafunction
请问为什么fn()的执行结果是这样的呢?
if不管是true/false,结果都是一样的。
烙印99
浏览 219回答 2
2回答

qq_遁去的一_1

函数可以被有条件来声明,这意味着,函数声明可能出现在一个if语句里,但是,这种声明方式在不同的浏览器里可能有不同的效果。因此,不应该在生成环境代码中使用这种声明方式,应该使用函数表达式来代替。详情根据官方文档,fn函数中的a://在Chrome里://'a'变量名被提升,但是typeofa为undefined////在Firefox里://'a'变量名被提升.但是typeofa为undefined////在Edge里://'a'变量名未被提升.而且typeofa为undefined////在Safari里://'a'变量名被提升.而且typeofa为function
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答