Heim >Web-Frontend >js-Tutorial >Eine kurze Diskussion über die Verwendung von setInterval und setTimeout in JavaScript_Grundkenntnisse

Eine kurze Diskussion über die Verwendung von setInterval und setTimeout in JavaScript_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 15:47:371406Durchsuche

Wenn es um setInterval geht, müssen wir setTimeout erwähnen. Beide werden verwendet, um eine bestimmte Funktion regelmäßig auszuführen. Der Unterschied besteht darin, dass setTimeout nur einmal ausgeführt wird, während setInterval wie folgt ausgeführt werden kann:

function do_sth() { console.log('Hello...'); }

setTimeout(do_sth, 2500);  // 2.5 秒后,执行 do_sth 函数(只执行一次)
setInterval(do_sth, 3500); // 3.5 秒后,执行 do_sth 函数(每隔 3.5 秒执行一次,一直执行下去)

Oberflächlich betrachtet haben beide ihre eigenen Verwendungszwecke und es gibt kein Problem. Wenn die von setInterval ausgeführte Funktion jedoch eine zeitaufwändige Aktion ist, ruft setInterval diese Funktion unabhängig von vorherigen Blockierungen weiterhin gemäß dem ursprünglichen Plan auf. Auf diese Weise nimmt mit der Zeit die Anzahl der Funktionen zu, die auf die Ausführung warten in der Warteschlange wird zunehmen. Die Lösung für dieses Problem besteht immer noch darin, setTimeout rekursiv aufzurufen, z. B.:

function do_sth() {
 console.log('Hello...');  // 即使这里执行比较耗时的动作也没问题,
                  // 等这里执行完了才会再去调用 setTimeout

 setTimeout(do_sth, 2500); // 安排后续执行
}

do_sth();             // 初次执行

Diese rekursive Aufrufmethode kann nicht nur den Zweck erreichen, eine bestimmte Funktion in einer Schleife auszuführen, sondern auch verhindern, dass sich nachfolgende Aufgaben ansammeln.

Wenn Sie der Meinung sind, dass diese Methode etwas wortreich ist, können Sie sie prägnanter schreiben:

(function() {
 console.log('Hello...');  // do something here
 setTimeout(arguments.callee, 2500);
})();

Das ist alles, aber wenn die Aufgabenkosten der geplanten Ausführung gering sind, ist setInterval im Allgemeinen kein Problem, aber wenn die Aufgabenkosten relativ hoch sind, verwenden Sie unbedingt setTimeout.

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