Question

J'ai récemment remarqué que beaucoup de fichiers JavaScript sur le Web commence par un ; immédiatement après la section des commentaires.

Par exemple, ce code de plugin jQuery commence par:

/**
 * jQuery.ScrollTo
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 9/11/2008                                      
 .... skipping several lines for brevity...
 *
 * @desc Scroll on both axes, to different values
 * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
 */
;(function( $ ){

Pourquoi le fichier doit commencer par un ;? Je vois cette convention dans les fichiers JavaScript côté serveur ainsi.

Quels sont les avantages et les inconvénients de le faire?

Était-ce utile?

La solution

Je dirais que depuis les scripts sont souvent concaténés et minified / comprimé / envoyés en même temps il y a une chance que le dernier gars avait quelque chose comme:

return {
   'var':'value'
}

à la fin du dernier script sans ; à la fin. Si vous avez un ; au début sur le vôtre, il est sûr, par exemple:

return {
   'var':'value'
}
;(function( $ ){ //Safe (still, screw you, last guy!)

return {
   'var':'value'
}
(function( $ ){ //Oh crap, closure open, kaboom!

return {
   'var':'value'
};
;(function( $ ){ //Extra ;, still safe, no harm

Autres conseils

Je crois (bien que je ne suis pas certain, alors s'il vous plaît ne pas se précipiter sur moi) que cela garantirait une déclaration préalable d'un autre fichier est fermé. Dans le pire des cas, ce serait une déclaration vide, mais dans le meilleur des cas, il pourrait éviter d'essayer de traquer une erreur dans ce dossier lorsque l'instruction inachevée se fait en haut.

Prenons cet exemple:

function a() {
  /* this is my function a */
}
a()
(function() {
  /* This is my closure */
})()

Qu'est-ce qui va se passer est qu'il sera évalué comme suit:

function a() {
  /* this is my function a */
}
a()(function() {})()

Alors, que jamais a EXPEDITEUR sera traitée en fonction d'un essayé d'être initialisé.

Il est surtout d'éviter les erreurs lorsque vous essayez de concaténer les fichiers se multiplient dans un seul fichier:

a.js

function a() {
  /* this is my function a */
}
a()

b.js

(function() {
  /* This is my closure */
})()

Si nous concat ces fichiers ensemble, il causera des problèmes.

Alors rappelez-vous donc de mettre votre ; devant ( et peut-être aussi quelques autres endroits. BTW. var a = 1;;;var b = 2;;;;;;;;;var c = a+b; est parfaitement valide JavaScript

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