Bolehkah Penutupan JavaScript Di Dalam Gelung Memecah Skop Pembolehubah?

DDD
Lepaskan: 2024-10-16 17:51:02
asal
683 orang telah melayarinya

Can JavaScript Closures Inside Loops Break Variable Scoping?

Penutupan JavaScript di dalam Gelung: Contoh Praktikal Ringkas

Dalam JavaScript, isu biasa timbul apabila menggunakan gelung untuk mencipta fungsi yang mencatat indeks atau nilainya. Walaupun berhasrat untuk mengelog nilai yang berbeza, semua fungsi sering berakhir dengan mengelog nilai yang sama disebabkan sifat skop pembolehubah.

Masalahnya

Pertimbangkan kod berikut:

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

for (var j = 0; j < 3; j++) {
  funcs[j](); // Outputs: "My value: 3" three times
}</code>
Salin selepas log masuk

Daripada mengeluarkan "Nilai saya: 0", "Nilai saya: 1" dan "Nilai saya: 2", ia mencatatkan "Nilai saya: 3" tiga kali. Tingkah laku ini berterusan merentas senario yang berbeza, termasuk menggunakan pendengar acara atau kod tak segerak.

Penyelesaian 1: ES6 membolehkan

ES6 memperkenalkan kata kunci let, yang mencipta pembolehubah yang diskop ke blok lampirannya. Menggunakan let dalam gelung memastikan setiap fungsi mempunyai pembolehubah tersendiri:

<code class="javascript">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

Untuk senario yang melibatkan lelaran ke atas tatasusunan, forEach kaedah menyediakan penyelesaian yang mudah. Setiap panggilan balik dalam gelung forEach mempunyai penutupannya sendiri, menyediakan pembolehubah unik untuk setiap lelaran:

<code class="javascript">someArray.forEach(function(arrayElement) {
  console.log("My value:", arrayElement);
});</code>
Salin selepas log masuk

Penyelesaian 3: Penutupan Klasik

Dalam versi JavaScript yang lebih lama, penutupan boleh digunakan untuk mengikat pembolehubah kepada nilai tertentu dalam fungsi:

<code class="javascript">var funcs = [];

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 Bolehkah Penutupan JavaScript Di Dalam Gelung Memecah Skop Pembolehubah?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!