Wann verwende ich Klammern und wann nicht?

7

Wie kann ich sagen:

%Vor%

Warum benötigt die Funktion in setTimeout keine Klammer, aber die letzte Zeile?

    
Phillip Senn 01.11.2011, 15:53
quelle

4 Antworten

6

myFunction ist eine Funktion

myFunction() ruft die Funktion auf und liefert den Wert, den die Funktion zurückgibt.

Der Zweck von setTimeout ist das Ausführen von Code nach einiger Zeit. Sie müssen nur die Funktion an sie übergeben (so kann setTimeout die Funktion selbst aufrufen, wenn dies angebracht ist), denn wenn Sie die Funktion (mit der Klammer) aufrufen, bevor sie an setTimeout übergeben wird, wird jetzt statt nach ausgeführt 1 Sekunde.

    
hugomg 01.11.2011, 15:59
quelle
17

Die Funktion setTimeout erwartet eine Funktionsreferenz * als Argument: Referenzen sind Variablen und haben keine Klammern.

Funktion Aufrufe erfordern Klammern (auch wenn die Funktion keine Parameter akzeptiert).

Kurzdarstellung: myFunction ist eine Referenz auf die Funktion. myFunction() führt die Funktion aus und "gleicht" in einem Ausdruck dem Rückgabewert der Funktion (oder undefined , wenn nichts zurückgegeben wird).

Graben tiefer: Es gibt Situationen, in denen setTimeout(myFunction(), 1000) Sinn macht, etwa wenn myFunction() selbst eine Funktion zurückgibt. Zum Beispiel:

%Vor%
  • Die anonyme Funktion (die eine einzige return -Anweisung enthält) wird sofort ausgeführt.
  • Der Rückgabewert dieser Funktion ist selbst eine Funktion, die ein alert enthält.

Also:

  • myFunction alone ist eine Referenz auf eine Funktion (die eine Funktion zurückgibt).
  • myFunction() wird ausgeführt. Es wird zu einer Funktionsreferenz ausgewertet, die für setTimeout() geeignet ist.

Schließlich:

%Vor%

Dies ruft den Rückgabewert von myFunction() in einer Sekunde auf. Eine Sekunde später gibt up die Warnung auf.

Siehe auch Warum benötigt die Funktionsanweisung einen Namen?

* Oder eine zu bewertende Zeichenfolge, aber eine Referenz wird bevorzugt.

    
Dave Newton 01.11.2011 15:55
quelle
5

Wenn Sie die Klammer verwenden, heißt es "rufen Sie diese Funktion jetzt auf". Wenn Sie also setTimeout(myFunction(),1000); angeben, wird der Rückgabewert der Funktion als Rückruf für das Zeitlimit verwendet. Wenn der Rückgabewert für die Funktion selbst keine Funktion ist, erhalten Sie einen Fehler, weil sie versucht, etwas auszuführen, das nach dem Timeout nicht ausführbar ist (eine Zeichenfolge, eine Zahl, undefiniert usw.).

    
Chris 01.11.2011 16:01
quelle
2

In Zeile 2 wird die Funktion myFunction nicht aufgerufen, sondern als Argument an die Funktion setTimeout übergeben, während in Zeile 4 myFunction aufgerufen wird; Um eine Funktion aufzurufen, müssen Sie immer Klammern verwenden, auch wenn keine Argumente vorhanden sind.

    
Luc125 01.11.2011 15:58
quelle

Tags und Links