Mengapa ia dikeluarkan 10 kali bukankah 10 yang ditolak masuk menjadi 1 - 9 Tolong beri saya jawapan kepada perangkap ini
function save_i(){
var a = [];
for(var i = 0;i<10;i++){
a[i] = function(){
return i;
}
}
return a;
}
var c = save_i();
for(var i = 0;i<10;i++){
console.log(c[i]());
//10次 10
}
Anda hanya perlu mencipta fungsi penutupan untuk menyimpan nilai i apabila gelung for dilaksanakan, dan ia boleh dikeluarkan mengikut urutan
Artikel yang saya baca pada masa lalu
Memahami penutupan memerlukan anda menulis kod dan kemudian boleh menggunakannya dalam kod anda sendiri Selain daripada itu, anda hanya boleh menghafalnya dengan menghafal.
Cina sekolah lama suka membiarkan anak-anak mereka membawa barang-barang semasa mereka masih kecil, tetapi mereka tidak tahu maksudnya dan kadang-kadang mereka tidak dapat menerangkannya dengan jelas. Mereka berharap mereka akan memahaminya secara semula jadi pada satu ketika masa depan
Di atas
Jika anda mempunyai pengetahuan asas tertentu Adalah disyorkan untuk membaca log yang saya tulis Jika anda masih tidak faham, tinggalkan mesej dan bertanya kepada saya .com/2084...
Setiap i sebagai balasan merujuk kepada i luaran yang sama, iaitu 10
Skop pembolehubah var ialah skop fungsi, bukan skop peringkat blok
Rantai skop telah dijana apabila ia dicipta
c[i] = function(i){ return i; };
Apabila berjalan, skop semasa tidak mempunyai i, dan i skop atas save_i() telah menjadi 10. Adakah anda fikir hasilnya ialah 0~9 Adakah anda fikir skop atas ialah skop global?a[i] ialah sekumpulan fungsi apabila ditugaskan, iaitu, ia tidak dilaksanakan, ia juga tidak mendapat i, dan skopnya juga tidak mendapat i
Apabila anda melaksanakannya di bawah, sekumpulan fungsi ini mula mencari i yang boleh diperolehi dalam skop mereka sendiri, iaitu 10 selepas gelung dilaksanakan
Kata kunci
var mengisytiharkan skop pembolehubah sebagai skop fungsi, jadi pembolehubah i dalam gelung for akan dinaikkan pangkat. Ia akan menjadi ok jika poster menukar bahagian dalam gelung for kepada fungsi laksana sendiri. cth:
fungsi save_i(){
}