23

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

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

据我所知,它完全没有任何作用。它不会将函数置于表达式位置,如()or !do: (function(){}())or !function(){}()。它似乎只是空行的行结束符。

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

4

1 回答 1

41

它可以防止任何以前的代码将您的代码作为函数的参数执行。

IE

mybrokenfunction = function(){

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


})(this);

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

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

如果您可以保证在您的函数之前不会有未终止的(无分号)函数,则可以省略起始分号,但不能,因此将多余的分号放入更安全。

于 2013-07-31T19:12:33.060 回答