2013-07-31 10 views
8

byłem sprawdzania kodu has.js i został zaskoczony przez początkową średnikiem tutaj:Jaki jest cel średnika przed IIFE?

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

O ile mi wiadomo, to robi absolutnie nic. Nie umieszcza funkcji w pozycji wyrażenia jako () lub ! do: (function(){}()) lub !function(){}(). Wydaje się, że jest to tylko linia ender dla pustej linii.

Jaki jest cel tego średnika? OCD pragnie symetrii między początkiem i końcem IIFE? :)

+0

Tak, dupe, dzięki! – mwcz

+0

Nie ma problemu @mwcz^_ ^ – Neal

Odpowiedz

21

Jest tam, aby uniemożliwić jakiemukolwiek poprzedniemu kodowi wykonywanie kodu jako argumentów funkcji.

tj

mybrokenfunction = function(){ 

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


})(this); 

wykona mybrokenfunction z anonimowej funkcji jako argument:

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

Jeśli można zagwarantować, że nie będzie niezakończony (brak średnik) funkcja zanim twoje, możesz pominąć początkowy średnik, ale nie możesz, więc bezpieczniej jest wstawić ten dodatkowy średnik.