以一个括号开头的 IIFE 不起作用

IIFE beginning with one parenthesis bracket not working

我正在研究 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 的一种风格选择。谁能解释一下?

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

看一下没有换行就看出问题了

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

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

例如:

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