Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mengelakkan Isu Penutupan dalam Gelung dalam JavaScript?

Bagaimana untuk Mengelakkan Isu Penutupan dalam Gelung dalam JavaScript?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-16 17:52:02962semak imbas

How to Avoid Closure Issues in Loops in JavaScript?

JavaScript Penutupan Di Dalam Gelung: Contoh Praktikal

Isu yang dihadapi semasa melelaran melalui gelung dan menyimpan fungsi tanpa nama ialah pembolehubah dalam fungsi ini rujuk pembolehubah yang sama di luar gelung. Ini boleh membawa kepada tingkah laku yang tidak dijangka apabila cuba merekodkan nilai pembolehubah ini.

Penyelesaian 1: ES6 Let Statement

ES6 memperkenalkan kata kunci let, yang mencipta kata kunci baharu skop berubah bagi setiap lelaran gelung. Ini memastikan bahawa setiap fungsi tanpa nama mempunyai pembolehubah tersendiri, menyelesaikan isu penutupan.

<code class="js">for (let i = 0; i < 3; i++) {
  funcs[i] = function() {
    console.log("My value:", i);
  };
}</code>

Penyelesaian 2: ES5.1 ForEach Method

Untuk situasi yang melibatkan terutamanya lelaran tatasusunan, kaedah forEach menyediakan penyelesaian yang mudah. Setiap lelaran fungsi panggil balik akan mempunyai penutupan sendiri dan akan menerima elemen semasa tatasusunan.

<code class="js">var someArray = [...];
someArray.forEach(function(arrayElement) {
  // Code for the specific array element
  // ...
});</code>

Penyelesaian 3: Penutupan Klasik

Penyelesaian lain ialah untuk mengikat pembolehubah dalam setiap fungsi kepada nilai yang berasingan dan tidak berubah di luar fungsi. Ini boleh dicapai menggunakan fungsi pembantu:

<code class="js">function createFunc(i) {
  return function() {
    console.log("My value:", i);
  };
}

for (var i = 0; i < 3; i++) {
  funcs[i] = createFunc(i);
}</code>

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Penutupan dalam Gelung 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