Nel tuo esempio, è sufficiente due affermazioni ed è equivalente a:
function foo(bar){
return bar;
}
0;
Questo è non una funzione di autoinvocazione. La prima affermazione è una dichiarazione di funzione , la seconda è semplicemente il numero letterale 0
, che non fa nulla. Le parentesi non eseguono la funzione, sono le grouping operator.
Come possiamo provarlo? Prova:
function foo(bar){
return "bar";
}(0);
e dimmi qual è l'uscita.
sarebbe una funzione di auto-invocando, se avessimo un funzione di espressione. Per questo è possibile utilizzare l'operatore di raggruppamento per forzare la valutazione come espressione.
Ad esempio:
(function foo(bar){
return bar;
})(0);
Questa è un'espressione funzione denominata. Il risultato dell'espressione ((function ....)
) è un riferimento di funzione e (0)
esegue la funzione, passando come argomento 0
.
La posizione della parentesi potrebbe anche essere:
(function foo(bar){
return bar;
}(0));
forse questo è quello che avete visto.
Questa tecnica è stata già ampiamente discusso qui: What is the purpose of a self executing function in javascript?
fonte
2012-06-21 10:43:59
Se hai appena fornito un cattivo esempio, allora la tua domanda è un duplicato di (http [Cosa parentesi che circondano una funzione/dichiarazione di oggetto JavaScript/classe significano?]: //stackoverflow.com/questions/440739/what-do-parentheses-surrounding-a-javascript-object-function-class-declaration-m). –