Rumah  >  Artikel  >  hujung hadapan web  >  Perbincangan ringkas tentang penggunaan setInterval dan setTimeout dalam pengetahuan JavaScript_Basic

Perbincangan ringkas tentang penggunaan setInterval dan setTimeout dalam pengetahuan JavaScript_Basic

WBOY
WBOYasal
2016-05-16 15:47:371370semak imbas

Apabila ia datang kepada setInterval, kita perlu menyebut setTimeout Kedua-duanya digunakan untuk melaksanakan fungsi tertentu secara kerap Perbezaannya ialah setTimeout hanya dilaksanakan sekali, manakala setInterval boleh dilaksanakan secara berterusan >

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

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

Pada zahirnya, kedua-duanya mempunyai kegunaan tersendiri dan tiada masalah. Walau bagaimanapun, jika fungsi yang dilaksanakan oleh setInterval adalah tindakan yang memakan masa, setInterval masih akan memanggil fungsi itu mengikut pelan asal, tanpa mengira sebarang penyekatan sebelumnya Dengan cara ini, seiring dengan berlalunya masa, bilangan fungsi yang menunggu untuk dilaksanakan dalam barisan akan bertambah. Penyelesaian kepada masalah ini masih dengan memanggil setTimeout secara rekursif, seperti:

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

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

do_sth();             // 初次执行

Kaedah panggilan rekursif ini bukan sahaja boleh mencapai tujuan melaksanakan fungsi tertentu dalam gelung, tetapi juga menghalang tugasan berikutnya daripada terkumpul.

Jika anda rasa kaedah ini agak bertele-tele, anda boleh menulisnya dengan lebih ringkas:

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

Itu sahaja, tetapi jika kos tugasan bagi pelaksanaan berjadual adalah kecil, setInterval biasanya tiada masalah, tetapi jika kos tugasan agak tinggi, pastikan anda menggunakan setTimeout.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn