2010-05-30 3 views
5

Dies ist der Tracking-Code für Google Analytics:Welche Rolle spielen die Klammern im folgenden Code?

var _gaq = _gaq || []; 
_gaq.push(["_setAccount", "UA-256257-21"]); 
_gaq.push(["_trackPageview"]); 

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

Sie können sehen, dass die Funktion in den Klammern ist.

Warum denkst du ist das?

Antwort

11

Es ist eine anonyme Funktion, die sofort definiert und aufgerufen wird. Es kann nicht von außen aufgerufen werden, da es keinen Namen hat. Alle darin enthaltenen Variablen werden auf die anonyme Funktion beschränkt. Dies könnte verwendet werden, um eine Verarbeitung im globalen Bereich durchzuführen, ohne neue Mitglieder hinzuzufügen.

+0

Nun, eine Funktion ohne Namen kann aufgerufen werden, wenn Sie sie einer Variablen zuweisen und sie dann mit dieser Variablen aufrufen (sie ist immer noch eine anonyme Funktion, die nur in einer Variablen gespeichert ist, die zufällig einen Namen hat). – jasonmp85

+0

@ jasonmp85, falsch, foo = function() {}; hat dieselbe Semantik wie Funktion foo() {}, nur unterschiedliche Syntax. –

+0

@teehoo Ich habe nichts Gegenteiliges gesagt – jasonmp85

2

Dies ist eine so genannte lambda function. Wie Sie sehen, hat er keinen Namen und wird sofort mit den Klammern am Ende der Zeile aufgerufen.

+0

Ich bin kein Javascript-Experte, aber warum habe ich diesen Code in eine Lambda-Funktion geschrieben und nicht einfach direkt eingefügt? – Onots

+1

Um zu verhindern, dass die Variablen von einem anderen JS-Code überschrieben werden. – halfdan

+4

Die Variablen, die überschrieben werden, sind nicht wirklich ein Problem - sie versuchen lediglich, den globalen Namensraum zu "verschmutzen". – James