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!