Bagaimana untuk Mengelakkan Perangkap Penutupan apabila Memanggil Fungsi Asynchronous Di dalam For Loop dalam JavaScript?

Patricia Arquette
Lepaskan: 2024-10-28 02:03:31
asal
706 orang telah melayarinya

 How to Avoid Closure Pitfalls when Calling Asynchronous Functions Inside a For Loop in JavaScript?

Memanggil Fungsi Asynchronous dalam for Gelung: Mengatasi Had Penutupan

Penutupan JavaScript menawarkan mekanisme skop yang kuat, tetapi ia boleh menghadapi cabaran apabila digabungkan dengan fungsi tak segerak dalam untuk gelung. Masalah ini nyata apabila panggilan balik yang dilaksanakan dalam gelung bergantung pada i, yang sentiasa mencerminkan lelaran gelung terakhir, menghasilkan hasil yang tidak dijangka.

Perangkap Penutupan

Seperti yang ditunjukkan dalam coretan kod yang disediakan, cuba menggunakan penutupan kerana hujah panggil balik memperkenalkan isu skop. Walaupun menggunakan penutupan seperti (function(x){return x})(i) atau create_closure(i)() untuk menangkap indeks lelaran semasa, nilai yang dikembalikan secara konsisten mencerminkan lelaran gelung akhir.

Penyelesaian yang Lebih Baik: forEach

Untuk menangani cabaran ini, pertimbangkan untuk memanfaatkan kaedah forEach JavaScript, yang berulang ke atas elemen dalam tatasusunan. Ia menyediakan kedua-dua item senarai dan indeksnya sebagai hujah kepada panggilan balik, menghapuskan komplikasi penutupan.

<code class="js">list.forEach(function(listItem, index){
  mc_cli.get(listItem, function(err, response) {
    do_something(index);
  });
});</code>
Salin selepas log masuk

Dengan menggunakan forEach, setiap panggilan balik beroperasi dalam skopnya sendiri, mengakses indeks yang betul untuk lelaran tertentu itu . Ini memastikan do_something(i) boleh mengakses indeks yang dimaksudkan dalam gelung for, seperti yang dijangkakan.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Perangkap Penutupan apabila Memanggil Fungsi Asynchronous Di dalam For Loop dalam JavaScript?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!