Frage

Beim Überblick über einige der Code, die im Twitter -Bootstrap JavaScript geschrieben wurden, sieht es so aus, als würden sie sofort anonyme Funktionen wie folgt anrufen:

!function( $ ) {

     ...

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

Wo ich traditionell dasselbe so gesehen habe, wie ich so erreicht habe:

(function($) {

    ...

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

Der erste Weg scheint ein bisschen hackig zu sein, und ich bin mir nicht sicher, ob es eher einen Nutzen oder Grund dafür gibt, und nicht den zweiten Weg? Beachten Sie, dass ich verstehe, wie es funktioniert, ich möchte verstehen, warum sie sich dafür entschieden haben.

War es hilfreich?

Lösung

  • Ein weniger Charakter, wenn er abgebrochen wird.
  • Das ! Sollte, wo ein anderer JavaScript-Code zuvor verkettet ist und kein nachfolgendes Halbkolon hat.

Es gibt keinen großen Unterschied. Ich würde alles benutzen, mit dem Sie sich wohler fühlten. Sie sollten wahrscheinlich zu Beginn Ihres Beispiels etwas werfen, um ...

Base.js

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

IM-Concat-to-Base.js

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

jsfiddle.

In eine Führung werfen ; Und sie arbeitet ...

jsfiddle.

...oder ein ! Wie der Twitter -Bootstrap ...

jsfiddle.

Andere Tipps

Sie sind beide Möglichkeiten, die Unklarheit in der Grammatik zu überwinden. Weder "hacky" als der andere. Es ist nur eine Stilwahl.

Sie könnten dies auch tun:

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

Oder:

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

Anstelle des Bewertungsschritts von !undefined Sie könnten auch die verwenden void Bediener zum Entfernen der Mehrdeutigkeit:

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

Hat eine Art C-Qualität ;-)

Eine Antwort, die ich noch nicht gesehen habe, ist, dass es vermeidet, dass Sie Ihre gesamte Funktion mit Klammern umgeben. Außerhalb von ästhetischen Überlegungen kann dies für einige Redakteure ein Plus sein, die Klammern verwenden, um den Einzweigungsgrad einer Linie zu bestimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top