Question

En examinant une partie du code écrit dans le Twitter Bootstrap Javascript, on dirait qu'ils appellent immédiatement appelé des fonctions anonymes comme ceci:

!function( $ ) {

     ...

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

Là où je l'ai toujours vu la même chose accompli de cette façon:

(function($) {

    ...

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

La première semble un peu hacky, et je ne suis pas sûr qu'il y ait un avantage ou raison de le faire de cette façon plutôt que la deuxième façon? Notez que je comprends comment cela fonctionne, je cherche à comprendre pourquoi ils ont choisi cette façon de le faire.

Était-ce utile?

La solution

  • Un caractère moins quand minifiés.
  • Le ! doit gérer où tout autre code JavaScript est concaténé avant cela et ne dispose pas d'un point-virgule fuite.

Il n'y a pas une énorme différence. Je l'utilise tout ce que vous étiez plus à l'aise avec. Vous devriez probablement jeter quelque chose au début de votre exemple pour éviter ...

base.js

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

im-concat à base.js

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

jsFiddle .

Toss dans un grand ; et elle travaille ...

jsFiddle .

... ou un ! comme Twitter Bootstrap ...

jsFiddle .

Autres conseils

Ils sont tous les deux façons d'obtenir passé l'ambiguïté dans la grammaire. Ni est plus « aki » que l'autre. Il est juste un choix de style.

Vous pouvez également faire ceci:

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

Ou:

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

Au lieu de l'étape d'évaluation de !undefined vous pouvez également utiliser l'opérateur void pour lever l'ambiguïté:

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

A une sorte de qualité C à elle; -)

Une réponse que je l'ai pas encore vu est qu'il évite autour de votre fonction entière avec des parenthèses. En dehors des considérations esthétiques, cela peut être un plus pour certains éditeurs qui utilisent entre parenthèses pour déterminer le niveau de l'empreinte d'une ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top