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

Perbincangan ringkas tentang penggunaan setInterval dan setTimeout dalam pengetahuan JavaScript_Basic

WBOY
Lepaskan: 2016-05-16 15:47:37
asal
1399 orang telah melayarinya

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...'); }

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

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:

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

 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:

(function() {
 console.log('Hello...');  // do something here
 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.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan