2013-07-31 7 views
8

stavo controllando il codice di has.js e rimase sconcertato dalla virgola iniziale qui:Qual è lo scopo di un punto e virgola prima di un IIFE?

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

Per quanto ne so, non fa assolutamente nulla. Non mette la funzione in posizione di espressione come () o ! do: (function(){}()) o !function(){}(). Sembra essere semplicemente un lineender per una linea vuota.

Qual è lo scopo di questo punto e virgola? Un desiderio OCD di simmetria tra l'inizio e la fine dell'IIFE? :)

+0

Sì, dupe, grazie! – mwcz

+0

Nessun problema @mwcz^_ ^ – Neal

risposta

21

È lì per evitare che codice precedente esegua il codice come argomento di una funzione.

cioè

mybrokenfunction = function(){ 

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


})(this); 

eseguirà mybrokenfunction con la funzione anonima come argomento:

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

Se si poteva garantire che non ci sarà un (senza virgola) funzione non terminato prima del tuo, potresti omettere il punto e virgola iniziale, ma non puoi, quindi è solo più sicuro inserire quel punto e virgola in più.