/ / Warum wird die Funktion in einer Anweisung zweimal in Klammern gesetzt? [duplizieren] - Javascript

Warum verpacken wir die Funktion in Klammern zweimal in einer Anweisung? [Duplizieren] - Javascript

Mögliche Duplikate:
Was ist der Zweck einer selbstausführenden Funktion in Javascript?
Erläutern Sie die gekapselte anonyme Funktionssyntax von JavaScript

zum Beispiel:

(function($) {
document.getElementById("foo").innerHTML = "bar";
})();

Ich verstehe, dass wir unseren eigenen Bereich erstellen möchten, um die Kollision von Variablen zu verhindern, aber warum muss Javascript () () haben?

Antworten:

5 für die Antwort № 1

Das macht es zu einer selbstaufrufenden anonymen Funktion.

(function() {
/* function body */
}) /* <-- end of function definition */ (); // <-- invoke that function immediately

5 für die Antwort № 2

Das gibt es nicht ()(), es hat (function(){})().

Die Funktionssyntax lautet function(){} und der Funktionsaufruf Operator ist (). Die Klammern, in denen die Funktion eingeschlossen ist, sind technisch nicht besonders. Sie können sie stattdessen durch ersetzen !:

!function(){}()

Das würde nicht funktionieren:

function(){}()

Weil dies in einem Anweisungskontext der Fall ist function startet eher eine Funktionsdeklaration als einen Ausdruck. Die Syntax schlägt dann fehl, weil eine Funktionsdeklaration einen Namen haben muss.

Wenn wir haben !function(){} (oder (function(){}), dann könnte es keine Aussage sein, weil ! (oder () erwartet bereits einen Ausdruck, wird also als Ausdruck behandelt.

Das können Sie also ohne Extra machen:

var a = function() {
return false;
}();

weil var a = erwartet bereits einen Ausdruck, function kann unmöglich der Beginn einer Funktionsdeklaration sein.

Ein einfacher Weg, um zu testen, ob Ihre Funktion als Ausdruck oder als Deklaration gesehen wird, ist, sich zu fragen, könnte ich benutzen var x Hier?

Zum Beispiel:

var x; //all is fine, so if I said function here, it would be a start of a function declaration

(var x) //Gives an error, so replacing var x with a function would be a function expression

var myVar = var x; //Gives an error, so replacing var x with a function would be a function expression

Und so weiter


1 für die Antwort № 3

Das erste ergibt die Funktion in der gleichen Weise wie das (2) Ergebnisse in 2. Der zweite nennt es.