Ich habe setTimeout
vielmals verwendet und eine Funktion als Referenz übergeben, z. B.
In einigen Fällen, um den Wert von this
zu erhalten, musste ich es vorher einer Variablen zuweisen, verstehe aber nicht, warum das Folgende nicht funktioniert:
Die Verwendung einer anonymen Funktion funktioniert jedoch:
%Vor% Dies funktioniert nicht, da setTimeout
eine Funktion mit dem Wert this
als globales Objekt und nicht als übergeordnetes Objekt aufruft. Sie übergeben einen Wert an die Funktion setTimeout
- sie wissen nicht, wie auf sie zugegriffen wurde, und können sie daher nicht mit dem richtigen this
-Wert aufrufen (im Gegensatz zu normalen Variablen wird der Wert von this
nur bestimmt wenn Sie die Funktion aufrufen, außer this
wurde mit Function.prototype.bind
) an einen bestimmten Wert gebunden.
Wenn Sie dies in eine anonyme Funktion ändern, verwenden Sie den Abschluss, um auf den Wert von that
zuzugreifen, auch wenn dieser Wert aufgerufen wird (der Variablenbereich einer Funktion wird festgelegt, wenn sie definiert ist, nicht wenn sie definiert ist) run).
Es ist einfach so, als ob du so etwas machst:
%Vor% Es gibt auch eine verwandte Frage zur Verwendung von this
mit setTimeout
: Übergeben Sie den richtigen "this" -Kontext an setTimeout callback?
Weil Sie im ersten Fall nur die Funktion log
referenzieren, die innerhalb des that
-Objekts liegt, aber ihre Beziehung zu that
ist verloren. Stellen Sie sich vor, dass setTimeout
die Methode log
direkt bei der gespeicherten Speicheradresse mit dem globalen Kontext aufruft.
Im zweiten Beispiel kommen Sie jedoch aus einem globalen Kontext, aber zuerst wird that
gesucht und danach log
, was dann mit dem Kontext von that
aufgerufen wird.
Denken Sie an setTimeout mit der folgenden Struktur:
%Vor%Tags und Links javascript settimeout