2009-06-23 5 views
10

Je regardais le code de jQuery UI, et je trouve que chaque fichier commence par une construction comme celle-ci:Quelle est la conséquence de ce peu de javascript?

;jQuery.ui || (function($) { 

Ma question est: pourquoi est-il un point-virgule avant jQuery, et pourquoi est la logique ou en cours ?

HJR

+0

La première de vos questions est une copie de [Que fait le point-virgule le plus important dans les bibliothèques JavaScript?] (Http://stackoverflow.com/q/1873983/1048572) – Bergi

+0

ou l'inverse? La question que vous avez liée est de quelques mois plus récente que celle-ci .. – jrharshath

+0

La question que j'ai liée est celle canonique sur le sujet, avec de meilleures réponses, c'est pourquoi je l'ai liée. – Bergi

Répondre

21

pourquoi est-il un point-virgule avant jQuery?

Le point-virgule est là pour assurer la concaténation de fichier en toute sécurité. (les bibliothèques et les composants de la bibliothèque sont souvent regroupés dans un seul fichier)

Pourquoi le bloc logique est-il en cours?

La fonction anonyme auto-invoquée sur le côté droit ne s'exécutera que si le côté gauche de l'instruction évalue à une valeur Falsey. Donc, si jQuery.ui existe déjà sur la page, la fonction ne sera pas exécutée.Il ne fonctionne que lorsque jQuery.ui n'existe pas encore.

+2

hehe, "falsey", sympa. C'est une manière géniale de décrire une valeur qui évalue comme fausse, j'aime ça. –

+1

Pas mon terme ... Je pense que je l'ai entendu dans une vidéo de Doug Crockford. – James

1

En anglais, cette ligne de code dit: soit existe jQuery.ui, ou de définir cette fonction ...

Par ex Si jQuery.ui n'est pas défini, la fonction sera créée. Le point-virgule initial ne devrait avoir aucun effet - il délimite simplement la fin d'une instruction de code.

1

Je pense que le OU logique est en train d'être fait pour permettre au fichier d'être inclus (et évalué) plusieurs fois, et non de se réduire: Si vous le rechargez, jQuery.ui sera déjà défini, et il ne sera pas faire n'importe quoi.

Le fichier peut être inclus plusieurs fois par erreur si quelqu'un a perdu la trace des balises de script. Comme pour le point-virgule, je peux seulement deviner que c'est une sauvegarde pour s'assurer que le fichier fonctionne aussi s'il est inclus dans un autre fichier, même si la dernière instruction n'est pas terminée par un point-virgule. Un faux point-virgule ne fait pas de mal, un point-virgule manquant.

6

Je suppose que le ; est de s'assurer que les empaqueteurs javascript ne gâcheront pas la ligne, mais c'est le meilleur que j'ai.

La logique ou est là pour vous assurer que jQuery.ui ne soit pas déclarée deux fois. JavaScript ne court-circuite pas, donc il n'évaluera pas le côté droit du || si le côté gauche évalue à quelque chose qui est truthey(merci JP!).

Décodage de la syntaxe bonus, que $ est passé à la fonction anonyme est la référence à jQuery. Je devais faire défiler tout le chemin vers le bas la page avant que l'on a cliqué :-)

Alors, voici une version en panne de la ligne ci-dessus

;    // extra semi colon to ensure correct concatenation and minifying 
jQuery.ui  // check if the variable called jQuery.ui is truthey 
||    // OR if jQuery.ui isn't defined 
(function($) {...})(jQuery); // define and execute an anonymous function 
          // passing in the conflict safe jQuery 
          // as the parameter called $ 
Questions connexes