Rumah > hujung hadapan web > tutorial js > Mengapakah `setTimeout` dalam `for`-Gelung Mencetak Nilai Terakhir Dua Kali, dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah `setTimeout` dalam `for`-Gelung Mencetak Nilai Terakhir Dua Kali, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Lepaskan: 2025-01-03 22:50:40
asal
693 orang telah melayarinya

Why Does `setTimeout` in a `for`-Loop Print the Last Value Twice, and How Can I Fix It?

Output Nilai Berturut-turut dengan setTimeout dalam for-Loop

Anda menghadapi masalah di mana anda cuba mencetak nilai berturut-turut menggunakan setTimeout dalam gelung untuk, tetapi ia menyebabkan nilai terakhir dicetak dua kali. Ini berlaku kerana apabila anda menggunakan pembolehubah i terus dalam fungsi setTimeout, nilainya dikemas kini pada masa fungsi tersebut dilaksanakan. Untuk menyelesaikan masalah ini, adalah penting untuk mencipta salinan i yang berbeza untuk setiap lelaran.

Penyelesaian yang disediakan mencapai ini dengan mengisytiharkan fungsi pembantu yang dipanggil doSetTimeout. Dalam fungsi ini, pembolehubah baharu diisytiharkan untuk memegang nilai semasa i, yang kemudiannya diluluskan sebagai hujah apabila mencipta tamat masa. Ini memastikan bahawa setiap fungsi tamat masa mempunyai salinan i tersendiri, menghapuskan sebarang isu dengan kemas kini nilai semasa pelaksanaan.

function doSetTimeout(i) {
  setTimeout(function() {
    alert(i);
  }, 100);
}

for (var i = 1; i <= 2; ++i)
  doSetTimeout(i);
Salin selepas log masuk

Dengan penyelesaian ini, anda boleh berjaya mencetak nilai 1 dan 2 berturut-turut seperti yang dimaksudkan.

Atas ialah kandungan terperinci Mengapakah `setTimeout` dalam `for`-Gelung Mencetak Nilai Terakhir Dua Kali, dan Bagaimana Saya Boleh Membetulkannya?. 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