我正在查看has.js的代码,并对最初的分号感到困惑:
;(function(g){
// code
}()(this);
据我所知,它绝对没有。它不会将函数置于表达式位置()
或!
执行:(function(){}())
或!function(){}()
。它似乎只是一个空行的线条。
这个分号的目的是什么? OCD希望在IIFE的开始和结束之间保持对称? :)
答案 0 :(得分:26)
这是为了防止任何先前的代码执行您的代码作为函数的参数。
即
mybrokenfunction = function(){
} //no semicolon here
(function(g){
})(this);
将以您的匿名函数作为参数执行mybrokenfunction:
mybrokenfunction = function(){}(function(g){})(this);
如果您可以保证在您之前没有未终止的(没有分号)功能,您可以省略起始分号,但是您不能,因此将额外的分号放入其中会更安全。