2012-10-31 14 views
6

Dlaczego w kodzie śledzenia Google Analytics zawierają te linie w zamknięciu?W kodzie śledzenia Google Analytics, dlaczego używają zamknięcia

(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); 
})(); 

Czy to nie działa tak samo bez zamknięcia rodzica?

+3

Ma to na celu uniknięcie zanieczyszczania globalnej przestrzeni nazw zmiennymi 'ga' i' s'. – AKX

Odpowiedz

7

Będzie działać tak samo, ale może łatwo złamać inne skrypty na twojej stronie, jeśli zadeklarowałeś zmienną z identyfikatorem użytym w kodzie Google.

Zawijanie deklaracji w zamknięciu powoduje, że zmienne są ograniczone do funkcji anonimowej i nie przenikają do zakresu globalnego.

Na przykład, należy rozważyć ten przykład z nowego zakresu:

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); 
})(); 

i ten przykład bez niego:

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

To będzie działać tak samo jak długo nie było globalne zmienne zakresie określonym używając tej samej nazwy. Zawijanie kodu w zamknięcie umieszcza go we własnym zakresie, aby był niezależny od jakiegokolwiek innego kodu na stronie.

Powiązane problemy