Heim >Web-Frontend >js-Tutorial >Warum gibt es bei setTimeout unterschiedliche Möglichkeiten, Funktionen aufzurufen?

Warum gibt es bei setTimeout unterschiedliche Möglichkeiten, Funktionen aufzurufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-25 12:36:11169Durchsuche

Why Does setTimeout Have Different Ways of Calling Functions?

Untersuchung des Klammer- und Zitat-Rätsels von setTimeout

Bei der Untersuchung von JavaScript-Timing-Ereignissen ruft die setTimeout-Funktion aufgrund ihrer vielfältigen Verwendung oft Verwirrung hervor . Lassen Sie uns die Unterschiede zwischen drei gängigen Aufrufmethoden klären:

Mit Klammern

setTimeout("alertMsg()", 3000);

In dieser Syntax wird die Funktion als Zeichenfolge innerhalb von double übergeben Zitate. JavaScript interpretiert dies als Codezeichenfolge, die nach der angegebenen Zeit ausgeführt werden soll. Von dieser Verwendung wird aufgrund von Sicherheitslücken abgeraten.

Ohne Anführungszeichen und Klammern

setTimeout(alertMsg, 3000);

Dieser sauberere Ansatz übergibt die Funktion direkt als Referenz. Die Referenz kann eine benannte Funktion, eine anonyme Funktion oder eine Variable sein, die auf eine Funktion zeigt. Dies ist die bevorzugte Methode, da sie potenzielle Sicherheitsbedenken beseitigt und den Code vereinfacht.

Nur Verwendung von Anführungszeichen

setTimeout("alertMsg", 3000);

In dieser besonderen Syntax wird eine Zeichenfolge übergeben ohne Klammern. Diese Methode ist veraltet und kann zu unvorhersehbarem Verhalten führen.

Um eine Funktion mit Argumenten in setTimeout aufzurufen, können Sie den Aufruf entweder in den Rückruf einbetten oder die Argumente in der letztgenannten Syntax angeben (nicht browserübergreifend kompatibel). :

setTimeout(function() { foo(arg1, arg2); }, 1000);

oder

setTimeout(foo, 2000, arg1, arg2);

Denken Sie daran, dass der Rückrufkontext (das Schlüsselwort this) standardmäßig verwendet wird zum globalen Objekt. Um es zu ändern, verwenden Sie die bind()-Methode:

setTimeout(function() { this === YOUR_CONTEXT; // true }.bind(YOUR_CONTEXT), 2000);

Es ist wichtig zu beachten, dass aufgrund von Sicherheitsrisiken dringend von der Übergabe von Zeichenfolgen an setTimeout abgeraten wird. Übergeben Sie Funktionsverweise immer direkt, um die Sicherheit zu gewährleisten und eine vorhersehbare Ausführung zu gewährleisten.

Das obige ist der detaillierte Inhalt vonWarum gibt es bei setTimeout unterschiedliche Möglichkeiten, Funktionen aufzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn