我希望这个(为了示例而减少)功能可以顺利运行,但由于以下原因而失败fn2 is not defined
:
void function(){
var var1 = fn1();
var var2 = fn2();
function fn1(){};
return function fn2(){};
}();
return 语句如何fn2
从提升中排除函数表达式?
我希望这个(为了示例而减少)功能可以顺利运行,但由于以下原因而失败fn2 is not defined
:
void function(){
var var1 = fn1();
var var2 = fn2();
function fn1(){};
return function fn2(){};
}();
return 语句如何fn2
从提升中排除函数表达式?
仅提升使用函数声明创建的函数。中的函数return function fn2(){};
是使用(命名的)函数表达式创建的,因此不会被提升。
如何评估函数取决于上下文。语句(例如 return 语句)中的任何函数都被解析为函数表达式。另一个例子是在IIFE中使用括号:括号充当分组运算符,确保括号的内容被评估为表达式。
在 Kangax 的优秀文章中可以找到很多关于这方面的信息: