This question already has answers here:
What are the rules for JavaScript's automatic semicolon insertion (ASI)?
                                
                                    (6个答案)
                                
                        
                        
                            strange observation on IIFE in node.js (Windows)
                                
                                    (2个答案)
                                
                        
                                4年前关闭。
            
                    
我正在用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))

关于javascript - 以一个括号括弧开头的IIFE无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36070927/

10-10 22:02