Bagaimana untuk Mengelakkan Isu Penutupan dalam Gelung dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-10-16 17:52:02
asal
961 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
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