【问题标题】:Function hoisting and the return statement函数提升和返回语句
【发布时间】:2014-02-19 17:39:36
【问题描述】:

我希望这个(为了示例而减少)函数可以顺利运行,但由于fn2 is not defined 而失败:

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

    function fn1(){};

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

return 语句如何将 fn2 的函数表达式排除在提升之外?

【问题讨论】:

    标签: javascript scope hoisting


    【解决方案1】:

    只有使用 声明 函数创建的函数才会被提升。 return function fn2(){}; 中的函数是使用(命名的)函数 expression 创建的,因此不会被提升。

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 2011-10-26
      • 2018-07-02
      • 2021-09-27
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多