Ho cercato informazioni sulle funzioni immediatamente invocate e da qualche parte mi sono imbattuto in questa notazione:
+function(){console.log("Something.")}()
Qualcuno può spiegarmi cosa +
significa / fa il segno davanti alla funzione?
Ho cercato informazioni sulle funzioni immediatamente invocate e da qualche parte mi sono imbattuto in questa notazione:
+function(){console.log("Something.")}()
Qualcuno può spiegarmi cosa +
significa / fa il segno davanti alla funzione?
Risposte:
Forza il parser a trattare la parte che segue +
come un'espressione. Di solito viene utilizzato per le funzioni che vengono invocate immediatamente, ad esempio:
+function() { console.log("Foo!"); }();
Senza il +
lì, se il parser si trova in uno stato in cui si aspetta un'istruzione (che può essere un'espressione o più istruzioni di non espressione), la parola function
sembra l'inizio di una dichiarazione di funzione piuttosto che un'espressione di funzione e quindi la ()
seguente (quelli alla fine della riga sopra) sarebbe un errore di sintassi (come l'assenza di un nome, in quell'esempio). Con il +
, lo rende un'espressione di funzione, il che significa che il nome è opzionale e che si traduce in un riferimento alla funzione, che può essere richiamato, per cui le parentesi sono validi.
+
è solo una delle opzioni. Può anche essere -
, !
, ~
, o semplicemente su qualsiasi altro operatore unario. In alternativa, puoi usare le parentesi (questo è più comune, ma né più né meno corretto sintatticamente):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
Affiliata alla risposta di @ TJCrowder, +
viene solitamente utilizzata per forzare il cast numerico di un valore, come spiega questa risposta SO . In questo caso viene chiamato "unary plus operator" (per facilitare la ricerca su Google).
var num = +variant;
Quindi di fronte a una funzione può essere un modo per forzare il risultato della funzione ad essere interpretato come un numero. Dubito che accada ancora, ma teoricamente la JIT potrebbe usarlo per compilare la funzione come una funzione solo numerica ecc. Tuttavia, per evitare che l'unario più sia una concatenazione quando usato in un'espressione più grande, avresti bisogno di parentesi:
blah + (+(function(){ var scope; return "4"; })());
(+function() { ... })()
notazione non può mai essere eseguita senza errori (a parte il fatto che questo non risponde alla domanda).
3++function...
che non è lo stesso.
+function...
non è necessario in sé. Si può ottenere lo stesso risultato con il blah + function( ){ ... }( );
quale si annullerebbe la necessità delle parentesi di avvolgimento.
Quindi la risposta breve è che impedisce un errore di sintassi, usando i risultati della funzione in un modo o nell'altro.
Puoi anche indicare al motore che non sei nemmeno interessato al valore di ritorno utilizzando l' void
operatore:
void function() { console.log("Foo!"); }();
Naturalmente, anche mettere le parentesi graffe intorno a tutto ciò serve a tale scopo.