功能提升和返回声明

时间:2014-01-28 12:10:17

标签: javascript scope hoisting

我希望这个(为了示例而减少)函数可以毫无障碍地运行,但它因fn2 is not defined而失败:

void function(){
    var var1 = fn1();
    var var2 = fn2();

    function fn1(){};

    return function fn2(){};
}();

return语句如何从提升中排除fn2的函数表达式?

1 个答案:

答案 0 :(得分:4)

仅提升使用声明功能创建的功能。 return function fn2(){};中的函数是使用(命名)函数表达式创建的,因此不会被提升。

如何评估函数取决于上下文。语句中的任何函数(例如return语句)都被解析为函数表达式。另一个例子是在IIFEs中使用括号:括号充当分组运算符,确保括号的内容被计算为表达式。

关于这方面的大量信息可以在Kangax的优秀文章中找到:

http://kangax.github.io/nfe/