Menggunakan Penutupan Secara Berkesan dalam Gelung: Memahami Konsep
Gelung berasaskan penutupan boleh mencabar untuk difahami, tetapi ia menawarkan teknik yang berkesan untuk mengekalkan keadaan unik semasa mengulang. Untuk memudahkan konsep, mari kita lihat semula kod contoh:
<code class="javascript">function addLinks() { for (var i = 0, link; i < 5; i++) { link = document.createElement("a"); link.innerHTML = "Link " + i; link.onclick = function(num) { return function() { alert(num); }; }(i); document.body.appendChild(link); } } window.onload = addLinks;</code>
Di sini, pembolehubah i ditangkap oleh fungsi dalaman yang dicipta dalam gelung. Fungsi ini kemudiannya ditetapkan sebagai pengendali acara kepada setiap pautan yang dibuat. Tanda kurungan berganda, (i), menyertakan panggilan fungsi yang serta-merta memanggil fungsi dalam.
Sebab pembinaan ini adalah untuk mencipta penutupan yang berbeza bagi setiap nilai i. Jika kita hanya memperuntukkan fungsi dalam secara langsung (tanpa kurungan berganda), semua penutupan akan berkongsi rujukan yang sama kepada pembolehubah i.
Pendekatan Kilang Fungsi
Seterusnya pendekatan biasa untuk menggunakan penutupan dalam gelung adalah dengan menggunakan kilang fungsi. Teknik ini mencipta rujukan fungsi untuk setiap lelaran, menangkap nilai unik i:
<code class="javascript">function generateMyHandler(x) { return function() { alert(x); } } for (var i = 0; i < 10; i++) { document.getElementById(i).onclick = generateMyHandler(i); }</code>
Pendekatan ini memastikan setiap pengendali peristiwa mempunyai contoh pembolehubah x sendiri, menghalang perkongsian pembolehubah dan kelakuan tidak konsisten.
Kesimpulan
Memahami penutupan dalam gelung adalah penting untuk memanfaatkan kuasanya dalam pengaturcaraan JavaScript. Dengan membuat penutupan unik atau menggunakan kilang fungsi, pembangun boleh mengekalkan keadaan tersendiri dalam gelung, membolehkan struktur kod yang kompleks dan cekap.
Atas ialah kandungan terperinci Bagaimanakah Penutupan Boleh Menyelesaikan Masalah Perkongsian Negeri dalam Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!