Domanda

Durante la revisione parte del codice scritto nel Twitter Bootstrap Javascript, sembra che stanno chiamando immediatamente richiamati funzioni anonime in questo modo:

!function( $ ) {

     ...

}(window.jQuery || window.ender);

Dove sono tradizionalmente visto la stessa cosa compiuta in questo modo:

(function($) {

    ...

})(window.jQuery || window.ender);

Il primo modo sembra un po 'hacky, e non sono sicuro se c'è qualche beneficio o motivo di farlo in questo modo, piuttosto che il secondo modo? Nota che ho capito come funziona, sto cercando di capire perché hanno scelto questo modo per farlo.

È stato utile?

Soluzione

  • Un meno carattere Quando viene ridotta.
  • Il ! dovrebbe gestire dove altro codice JavaScript viene concatenato prima di questo e non ha un finale punto e virgola.

Non è una differenza enorme. Vorrei usare qualunque cosa tu fossi più a suo agio con. Probabilmente si dovrebbe buttare qualcosa all'inizio del vostro esempio per evitare ...

base.js

var lol = function() {
   alert(arguments[0]);
}

im-concat-to-base.js

(function() {
    // Irrelevant.
})();

jsFiddle .

Toss in un ; leader e lavora ...

jsFiddle .

... o un ! come il Twitter Bootstrap ...

jsFiddle .

Altri suggerimenti

Sono entrambi modi di ottenere passato, l'ambiguità nella grammatica. Nessuno dei due è più "hacky" rispetto agli altri. E 'solo una scelta di stile.

Si potrebbe anche fare questo:

0 + function( $ ) {
  // ...
} ( window.jQuery || window.ender );

o

parseInt(function( $ ) {
  // ...
} ( window.jQuery || window.ender ) );

Al posto della fase di valutazione dei !undefined si potrebbe anche utilizzare l'operatore void per rimuovere l'ambiguità:

void function($) {
     ...
}(window.jQuery || window.ender);

ha una sorta di C di qualità ad esso; -)

Una risposta che ho visto ma non è che si evita che circonda l'intera funzione con parentesi. Al di fuori di considerazioni estetiche, questo può essere un vantaggio per alcuni editori che utilizzano le parentesi per determinare il livello di rientro di una linea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top