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:
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.
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.
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!