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 >
1 | function do_sth() { console.log( 'Hello...' ); }
|
Salin selepas log masuk
1 2 | setTimeout(do_sth, 2500);
setInterval(do_sth, 3500);
|
Salin selepas log masuk
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:
1 2 3 4 5 6 7 8 | function do_sth() {
console.log( 'Hello...' );
setTimeout(do_sth, 2500);
}
do_sth();
|
Salin selepas log masuk
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:
1 2 3 4 | ( function () {
console.log( 'Hello...' );
setTimeout(arguments.callee, 2500);
})();
|
Salin selepas log masuk
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.