在IIFE之前分号的目的是什么?

时间:2013-07-31 19:10:45

标签: javascript syntax

我正在查看has.js的代码,并对最初的分号感到困惑:

;(function(g){
  // code
}()(this);

据我所知,它绝对没有。它不会将函数置于表达式位置()!执行:(function(){}())!function(){}()。它似乎只是一个空行的线条。

这个分号的目的是什么? OCD希望在IIFE的开始和结束之间保持对称? :)

1 个答案:

答案 0 :(得分:26)

这是为了防止任何先前的代码执行您的代码作为函数的参数。

mybrokenfunction = function(){

} //no semicolon here
(function(g){


})(this);

将以您的匿名函数作为参数执行mybrokenfunction:

mybrokenfunction = function(){}(function(g){})(this);

如果您可以保证在您之前没有未终止的(没有分号)功能,您可以省略起始分号,但是您不能,因此将额外的分号放入其中会更安全。