Frage

Ich habe vor kurzem festgestellt, dass eine Menge von JavaScript-Dateien auf dem Web Start mit einem ; unmittelbar nach dem Kommentarbereich.

Zum Beispiel diese Code startet der jQuery-Plugin mit:

/**
 * 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( $ ){

Warum die Notwendigkeit Datei mit einem ; beginnen? Ich sehe diese Konvention in serverseitige JavaScript-Dateien als auch.

Was sind die Vor- und Nachteile, dies zu tun?

War es hilfreich?

Lösung

Ich würde sagen, da Skripte sind oft verketteten und minimierte / komprimiert / gesendet zusammen es eine Chance ist der letzte Kerl wie etwas hatte:

return {
   'var':'value'
}

am Ende des letzten Skript ohne ; am Ende. Wenn Sie eine ; zu Beginn auf Ihrem haben, ist es sicher, Beispiel:

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

Andere Tipps

Ich glaube, (obwohl ich nicht sicher bin, bitte an mich also nicht pounce), dass dies eine vorherige Anweisung sicherstellen würde aus einer anderen Datei geschlossen wird. Im schlimmsten Fall würde dies eine leere Anweisung sein, aber im besten Fall könnte es vermeiden, in dieser Datei einen Fehler auf der Spur zu versuchen, wenn die unvollendete Anweisung tatsächlich kam von oben.

Betrachten Sie dieses Beispiel:

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

Was passieren wird, ist, dass es wie folgt bewertet werden:

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

Also, was jemals zurückkehrt a wird als Funktion behandelt werden eine versuchte initialisiert werden.

Dies ist vor allem Fehler zu vermeiden, wenn sie concat multiplizieren Dateien in eine Datei versucht:

a.js

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

b.js

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

Wenn wir diese Dateien zusammen verketten wird es zu Problemen führen.

erinnern So also Ihre ; vor ( zu setzen und vielleicht auch ein paar andere Orte. Btw. var a = 1;;;var b = 2;;;;;;;;;var c = a+b; ist absolut gültige JavaScript

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