【问题标题】:IIFE run Function Declaration and Function Expression with different resultIIFE 以不同的结果运行函数声明和函数表达式
【发布时间】:2020-01-21 16:50:25
【问题描述】:

我尝试使用立即调用函数表达式来运行另一个函数。 如果我使用FE,结果会出错

let f = function(x) {
  alert(x)
}

(function() {
  f(1)
}())
// ReferenceError: Cannot access 'f' before initialization

使用 FD 就可以了:

function f(x) {
  alert(x)
}

(function() {
  f(1)
}())
// 1

里面发生了什么?

【问题讨论】:

    标签: javascript function closures hosting


    【解决方案1】:

    导致函数声明不能直接调用,这就是为什么(...)被解析为单独的语句。

    您永远不会以 ; 结束包含 函数表达式 的变量声明,因此以下括号是函数调用:

     let f = function() { /*...*/ }(/*...*/)(/*...*/);
    

    TLDR:始终以分号结束语句。

     let f = function() { /*...*/ }; // <<<
    

    【讨论】:

      猜你喜欢
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多