2012-10-31 7 views
6

Warum werden diese Zeilen im Verfolgungscode von Google Analytics in einen Abschluss eingeschlossen?Warum wird im Google Analytics-Tracking-Code eine Sperrung verwendet?

(function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})(); 

Würde es nicht das gleiche ohne den Elternschluss arbeiten?

+3

Dies ist zu vermeiden, den globalen Namensraum mit den 'ga' und' s' Variablen zu verschmutzen. – AKX

Antwort

7

Es würde genauso funktionieren, aber es könnte leicht andere Skripte auf Ihrer Seite brechen, wenn Sie eine Variable mit einer Kennung im Google-Code deklariert haben.

Durch das Umschließen der Deklaration in einer Closure werden die Variablen auf die anonyme Funktion beschränkt und nicht in den globalen Bereich ausgeleitet.

Zum Beispiel betrachten Sie dieses Beispiel mit dem neuen Anwendungsbereich:

var ga = "something important for my script"; // Not overwritten in this scope 

(function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})(); 

Und diesem Beispiel ohne es:

var ga = "something important for my script"; // Overwritten! 

var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
3

Es würde, so lange die gleiche Arbeit, da es keine globalen Bereich Variablen wurden definiert mit dem gleichen Namen. Wenn Sie den Code in eine Closure einfügen, wird sie in einem eigenen Bereich platziert, sodass sie unabhängig von anderem Code auf der Seite ist.

Verwandte Themen