2013-07-31 2 views
8

Я проверял код has.js и был озадачен исходной точкой с запятой здесь:Какова цель точки с запятой перед IIFE?

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

Насколько я знаю, это абсолютно ничего не делает. Он не помещает функцию в позицию выражения как () или ! do: (function(){}()) или !function(){}(). Кажется, это всего лишь ограничитель строки для пустой строки.

Какова цель этой точки с запятой? Желание OCD для симметрии между началом и концом IIFE? :)

+0

Да, обманывайте, спасибо! – mwcz

+0

Без проблем @mwcz^_ ^ – Neal

ответ

21

Это то, что предыдущий код не выполнял код в качестве аргумента функции.

т.е.

mybrokenfunction = function(){ 

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


})(this); 

выполнит mybrokenfunction с анонимной функции в качестве аргумента:

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

Если бы вы могли гарантировать, что не будет несогласованной (не точка с запятой) функция, прежде чем ваша, вы можете опустить стартовую точку с запятой, но вы не можете, так что безопаснее поставить эту дополнительную точку с запятой.

Смежные вопросы