Der Punkt ist, dass alle Variablen, die im coolen Zeug deklariert sind, nicht im globalen Namespace erstellt werden. Jede Funktion in Javascript wird einen solchen Bereich erstellen. Angenommen, Sie haben Javascript, das Sie ausführen möchten. Wenn Sie dies tun:
var b = 1;
// stuff using b
Und einige andere Code verwendet b, es wird Ihren Restwert erhalten. (Oder, noch schlimmer, wenn ein anderer Code b vor der Ausführung Ihres Codes setzt und dann versucht, seinen alten Wert später zu erhalten, hätten Sie ihn zwischenzeitlich geändert.)
Auf der anderen Seite, wenn Sie dies haben Code, der erklärt, und ruft dann die Funktion:
function a() {
var b = 1;
}
a();
und einige andere Code später verwendet b, wird es sehen Ihre Werte nicht, da b auf die Funktion lokal ist. Das Problem dabei ist natürlich, dass du immer noch einen globalen Namen machst - "a", in diesem Fall. Also, wir wollen eine Funktion ohne Namen - deshalb bekommst du den Code, den du beschrieben hast. Er deklariert eine Funktion ohne Namen und ruft sie dann auf.
Leider kann man nicht einfach sagen:
function() { ... }()
da dies als eine Funktion Erklärung Anweisung und dann einen Syntaxfehler analysiert werden. Wenn Sie die Funktionsdeklaration in Klammern einschließen, erhalten Sie eine Funktion Ausdruck, die dann aufgerufen werden kann. Sie nennen es wie jeden anderen Funktionsausdruck (wie a, oben) und verwenden den zweiten Satz von Parens. Wenn die Funktion beispielsweise Argumente verwendet, übergeben Sie sie dort:
Außer natürlich, dass Sie mit dem Namen Ihrer Funktion in Konflikt geraten. –
Äh, ja. Deshalb wird normalerweise mit einer anonymen Funktion gearbeitet. Ich habe gerade eine benannte Funktion verwendet, um eine vertrautere Form zu zeigen, die dasselbe tut. –
jder hat die bessere Antwort, für diejenigen, die zu spät zur Party kommen. – Triptych