2

我希望这个(为了示例而减少)功能可以顺利运行,但由于以下原因而失败fn2 is not defined

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

    function fn1(){};

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

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

4

1 回答 1

4

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

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

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

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

于 2014-01-28T12:16:21.100 回答