Rumah > hujung hadapan web > tutorial js > Mengapa Panggilan Balik `setInterval` Saya Hanya Berjalan Sekali?

Mengapa Panggilan Balik `setInterval` Saya Hanya Berjalan Sekali?

Mary-Kate Olsen
Lepaskan: 2024-12-11 03:36:11
asal
944 orang telah melayarinya

Why Does My `setInterval` Callback Only Run Once?

Pelaksanaan tunggal panggilan balik setInterval:

Pertimbangkan kod berikut yang bertujuan untuk mencipta pembilang:

function timer() {
  console.log("timer!")
}

window.setInterval(timer(), 1000)
Salin selepas log masuk

Walau bagaimanapun , kod ini melaksanakan fungsi pemasa sekali sahaja. Mari kita selidiki sebab isu ini berlaku dan cara menyelesaikannya.

Masalah timbul kerana parameter pertama setInterval harus menjadi rujukan fungsi, bukan panggilan fungsi. Dalam kod di atas, pemasa() dipanggil serta-merta, kembali tidak ditentukan. Akibatnya, setInterval ditetapkan untuk memanggil undefined pada selang 1000 milisaat, yang membawa kepada satu pelaksanaan dan bukannya gelung berterusan.

Untuk membetulkannya, kita perlu menghantar rujukan fungsi dan bukannya memanggil fungsi . Berikut ialah kod yang diperbetulkan:

function timer() {
  console.log("timer!");
}

window.setInterval(timer, 1000);
Salin selepas log masuk

Dalam versi yang diperbetulkan ini, pemasa diluluskan sebagai rujukan, membenarkan setInterval memanggilnya pada selang waktu yang ditentukan.

Sebagai alternatif, kita boleh menggunakan fungsi tanpa nama sebagai panggilan balik:

window.setInterval( function() {
  console.log("timer!");
}, 1000)
Salin selepas log masuk

Pendekatan ini lebih pendek tetapi mungkin menjadi kurang boleh dibaca apabila fungsi menjadi lebih kompleks.

Dengan melaksanakan perubahan ini, fungsi pemasa kini akan dilaksanakan berulang kali pada selang waktu yang dikehendaki, memastikan pembilang berjalan berterusan.

Atas ialah kandungan terperinci Mengapa Panggilan Balik `setInterval` Saya Hanya Berjalan Sekali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan