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