【问题标题】:Immediately invoked function expression causing error?立即调用函数表达式导致错误?
【发布时间】:2017-02-23 07:52:40
【问题描述】:

有人可以解释为什么会发生这种情况吗?

如果我在一个名为test.js文件中写下这样的内容,

const anyObject = {}
(function(){ 
  console.log('hello world!') 
}())

使用$node test.js通过控制台运行它

然后在控制台中,hello world! 将被打印出来,但随后是: TypeError: (intermediate value) is not a function

我不知道那里到底发生了什么,我猜节点以某种方式将函数表达式作为函数调用表达式?

我正在使用节点v6.9.1

【问题讨论】:

  • 为了热爱一切,请使用分号,
  • 检查括号')'
  • IIFE 的演示通常像 ;(function() ... ... 因为懒惰的程序员不会在应该使用分号的地方使用分号 ...
  • 在你的代码上使用一个 linter 来解决这些问题......不过,我怀疑你会厌倦即使是最短的代码段中的“缺少分号”错误
  • 一个很好的例子,说明人们在懒惰并忽略分号时如何陷入困境。

标签: javascript node.js iife


【解决方案1】:

您可以使用void 进行不带分号的调用。

这会强制表达式计算并返回undefined

const anyObject = {}
void (function() { 
    console.log('hello world!') 
}())

即使没有外括号也可以工作。

const anyObject = {}
void function() { 
    console.log('hello world!') 
}()

【讨论】:

    【解决方案2】:
    • 使用分号
    • 您的 IIFE 中的语法不同

    const anyObject = {};
    (function(){ 
      console.log('hello world!');
    })();

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 2012-12-28
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2014-11-26
      • 2023-04-04
      相关资源
      最近更新 更多