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!