Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mengelakkan Perangkap Penutupan apabila Memanggil Fungsi Asynchronous Di dalam For Loop dalam JavaScript?

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

Patricia Arquette
Patricia Arquetteasal
2024-10-28 02:03:31707semak imbas

 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>

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!

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