Questo impone la funzione da valutare come espressione, che consente di richiamarla immediatamente in linea.
Altre alternative
si può fare questo con qualsiasi operatore. Ecco alcuni esempi ...
'invoke',function(){ /*code*/ }();
1+function(){ /*code*/ }();
void function(){ /*code*/ }();
~function(){ /*code*/ }();
+function(){ /*code*/ }();
La cosa bella di alcuni di questi è che il significato dell'operatore non è sovraccarico.
Il problema con ()
Quando si utilizza ()
intorno alla funzione, si può colpire alcuni bug che si sorgere se si dispone di più di una di fila senza un punto e virgola che li separa .
(function() {
alert('first');
}())
(function() {
alert('second');
}())
// TypeError: undefined is not a function
Ciò comporterà un TypeError
, poiché la coppia di esterno ()
intorno alla seconda funzione sarà interpretato come intenda chiamata una funzione. Il primo non restituisce una funzione, ovviamente, quindi stai cercando di chiamare il numero undefined
.
Come utilizzando un operatore diverso affronta (o evita) il problema
Anche un operatore come +
, che sovraccarica certa misura non causerà un errore.
Se si esegue questa operazione ...
+function() {
alert('first');
}()
+function() {
alert('second');
}()
Il primo +
viene interpretato come + unario operatore, e converte il risultato restituito dalla prima funzione, che in questo caso è undefined
modo che viene convertito in NaN
.
Il secondo +
sarà interpretato come l'operatore aggiunta, e così cercherà di aggiungere NaN
al risultato ritorno della seconda funzione, che ancora una volta ecco undefined
.
Il risultato, naturalmente, è NaN
, ma è innocua. Non c'è codice illegale per generare un errore.
Dimostrazione di come gli operatori interagiscono con le funzioni
Per dimostrare questo, basta dare ogni funzione di un valore di ritorno, poi incollarlo nella console ...
+function() {
alert('first');
return "10";
}()
+function() {
alert('second');
return 20;
}()
// 30
otterrai i due alert
s, e quindi la console mostrerà 30
perché il primo operatore +
converte lo Stri ng "10"
al numero 10
e il secondo +
ha aggiunto i due risultati insieme.
Vale la pena sottolineare che mentre il primo funziona, nega il valore restituito dalla funzione, mentre il secondo non lo fa. – toddsundsted
Perché viene utilizzato invece di terminare appena l'istruzione con un punto e virgola? È ancora solo un personaggio. – js1568