Heim  >  Artikel  >  Web-Frontend  >  Hat SetTimeout tatsächlich einen dritten Parameter?

Hat SetTimeout tatsächlich einen dritten Parameter?

angryTom
angryTomnach vorne
2019-12-09 17:47:162965Durchsuche

Hat SetTimeout tatsächlich einen dritten Parameter?

setTimeout hat tatsächlich einen dritten Parameter?

Apropos setTimeout, jeder kennt es und die Verwendung ist auch sehr einfach: setTimeout(fun, delay).

Aber Sie glauben es vielleicht nicht, aber setTimeout, das seit so vielen Jahren verwendet wird, hat tatsächlich einen dritten Parameter. Werfen wir einen Blick auf den dritten Parameter von setTimeout.

[Verwandte Kursempfehlungen: JavaScript-Video-Tutorial]

Schauen wir uns zuerst einen einfachen Code an:

setTimeout(function(x) {
    console.log(x);
}, 1000, 1);

Die Konsole gibt dann 1 aus es kann Warum kann ich keine weiteren Parameter hinzufügen? Schauen wir uns weiterhin den folgenden Code an:

setTimeout(function(x,y) {
    console.log(x+y);
}, 1000, 1, 2);

Die Konsolenausgabe ist 3, was offensichtlich die Summe des dritten und vierten Parameters ist.

Nachdem sie das gesehen haben, sollten viele Freunde erkennen, dass der dritte Parameter von setTimeout der Parameter der ersten Funktion von setTimeout ist.

Durch die Abfrage von MDN https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout können wir die Beschreibung des dritten Parameters sehen:

var timeoutID = scope.setTimeout(function[, delay, arg1, arg2, ...]);
var timeoutID = scope.setTimeout(function[, delay]);
var timeoutID = scope.setTimeout(code[, delay]);

So Um genau zu sein, kann setTimeout unzählige Parameter haben, aber ab dem dritten Parameter ist es der optionale Parameter .

Okay, welche Probleme können wir lösen, nachdem wir diese Funktion kennen? Die klassischste Variante ist die Verwendung von setTimeout innerhalb einer for-Schleife.

for(var i = 0; i<6; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}

Das obige Beispiel ist eine klassische Interviewfrage. Sie wird sechsmal hintereinander ausgegeben, da setTimeout eine asynchrone Operation ist und zum Zeitpunkt der Ausführung von setTimeout die for-Schleife ausgeführt wurde und ich bereits ausgeführt wurde gleich 6, also wird 6 mal 6 ausgegeben. Interessierte Freunde können meinen letzten Blog „Über die Verwendung von setTimeout in for-Schleifen“ lesen. Schauen wir uns diesen Ansatz noch einmal an.

for(var i=0;i<6;i++) {
    setTimeout(function(j) {
        console.log(j);
    }, 1000, i);
}

Da der jedes Mal übergebene Parameter der aus der for-Schleife entnommene Wert ist, werden nacheinander 0 bis 5 ausgegeben. Natürlich ist dies immer noch ein Bereichsproblem, aber hier speichert der dritte Parameter von setTimeout den Wert von i. Diese Lösung ist wesentlich leichter als die Verwendung von Verschlüssen.

Darüber hinaus kann der dritte Parameter auch als Funktion verwendet werden.

for(var i=0;i<6;i++) {

    setTimeout(function(j) {

        console.log(j);

    }, 1000, i);

}

Die endgültige Ausgabe ist 0 beim ersten Mal und 1 beim zweiten Mal.

Sie sehen, dass auch zuerst der dritte Parameter und dann die Funktion ausgeführt werden kann.

Abschließend müssen Sie bei der Verwendung des dritten Parameters auf das Kompatibilitätsproblem achten. Wenn Sie mit IE9 und früheren Versionen kompatibel sein müssen, müssen Sie einen Teil des bereitgestellten kompatiblen alten IE-Codes einführen von MDN https://developer.mozilla .org/zh-CN/docs/Web/API/Window/setTimeout#%E5%85%BC%E5%AE%B9%E6%97%A7%E7% 8E%AF%E5%A2%83%EF% BC%88polyfill%EF%BC%89, das Portal ist hier gepostet, wenn Sie interessiert sind, können Sie es sich ansehen.

Das Folgende ist eine Beschreibung der Kompatibilität auf MDN:

Note: Passing additional arguments to the function in the first syntax does not work in Internet Explorer 9 and below. If you want to enable this functionality on that browser, you must use a polyfill (see the Polyfill section).

Dieser Artikel stammt aus der Spalte JS-Tutorial, willkommen zum Lernen!

Das obige ist der detaillierte Inhalt vonHat SetTimeout tatsächlich einen dritten Parameter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen