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
Mary-Kate Olsenasal
2024-12-11 03:36:111007semak imbas

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)

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);

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)

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!

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