【问题标题】:IIFE beginning with one parenthesis bracket not working [duplicate]IIFE以一个括号开头不起作用[重复]
【发布时间】:2016-07-04 09:55:36
【问题描述】:

我正在查看 javascript 中的 IIFE,据我所知,这只是关于如何编写 IIFE 的一种样式选择,并且以下两种方法都应该有效。

  var sum = 0
  (function test(n){
      sum += n
  }(1));
  console.log(sum);

此日志:Uncaught TypeError: 0 is not a function

或者,当我以 ! 开始 IIFE 时,它可以工作

var sum = 0
  !function test(n){
      sum += n
  }(2);

  console.log(sum) //logs 2

正如您所见,当我以 ! 开始 IIFE 时,它按预期工作。我现在很困惑,因为我认为这只是一个关于你如何实现 IIFE 的风格选择。谁能解释一下?

【问题讨论】:

  • 一个简单的解决方案是,如果您不想在每一行都添加分号,请始终在您的 IIFE 之前添加一个分号。

标签: javascript iife


【解决方案1】:

这与您仅使用一个括号这一事实无关,这是第一行末尾缺少分号。

不换行看问题。

var sum = 0(function test(n){
  sum += n
}(1));

如果您遵循无分号的方法,那么您需要用分号保护以[( 开头的换行符。

例如:

var sum = 0
;(function test(n){
  sum += n
}(1))

【讨论】:

  • 啊,明白了!现在可以了!好的,所以我应该在适当的时候使用; .. 但是,我很想知道为什么它与! 一起使用
  • 0!function() {} 不会尝试调用0,就好像它是一个函数一样。
  • 明白了,有道理!谢谢丹
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 2016-12-07
  • 1970-01-01
  • 2022-12-07
  • 2014-10-19
  • 1970-01-01
  • 2022-10-29
相关资源
最近更新 更多