Rumah  >  Artikel  >  hujung hadapan web  >  Perbincangan ringkas tentang penutupan dalam kemahiran js_javascript

Perbincangan ringkas tentang penutupan dalam kemahiran js_javascript

WBOY
WBOYasal
2016-05-16 16:09:211156semak imbas

Pertama, mari lihat sekeping kod:

Salin kod Kod adalah seperti berikut:

111
222
333
var a=document.getElementsByTagName("a");
fungsi b(){
  untuk(var i=0;i   a[i].onclick=function(){
makluman(i);
  } 
}
}

Mengikut niat asal reka bentuk kami, mengklik pada teg harus memaparkan nombor siri teg dengan sewajarnya, iaitu mengklik pada yang pertama a akan muncul 0, mengklik pada yang kedua akan muncul 1 ... Tetapi sebenarnya ia selalu muncul sebagai bilangan tag. Masalah ini telah menyusahkan saya untuk masa yang lama Saya telah merujuk banyak maklumat dan buku rujukan dalam talian, dan kebanyakannya adalah palsu Saya percaya bahawa ramai pelajar tidak memahami sebab-sebabnya . Jika terdapat sebarang ketidaksesuaian, , sila tegur dan betulkan saya.

Dari pemahaman peribadi saya, sebab mengapa fungsi di atas gagal mencapai tujuannya ialah fungsi pemprosesan acara terikat kepada pembolehubah i, dan fungsi pemprosesan acara ditetapkan kepada onclick, yang bermaksud ia hanya diaktifkan apabila tag a diklik. Fungsi ini akan dipanggil, secara logiknya, fungsi(){alert(i);} dalam gelung for mudah sebenarnya tidak dilaksanakan, dan apabila kita mengklik label, gelung for telah pun Selepas pelaksanaan selesai, nilai i pada masa ini ialah nilai akhir bagi gelung for. Pemahaman mudah ialah nilai i tergolong dalam fungsi b, dan nilai i yang kita perlukan ialah nilai yang dihantar ke dalam fungsi pemprosesan acara dalam masa nyata. Jadi adakah ada cara untuk mencapai niat reka bentuk asal kami? Pelajar pintar mungkin meneka bahawa ia adalah untuk menggunakan penutupan.

Mari kita lihat sekeping kod yang lain:

Salin kod Kod adalah seperti berikut:

var a=document.getElementsByTagName("a");
fungsi b(){
  untuk(var i=0;i    a[i].onclick=function(j){
    fungsi kembali(){
makluman(j);
   }
  }(i);
}
}
b();

Melaksanakan kod di atas, anda boleh mendapati bahawa fungsi yang kami mahukan telah dilaksanakan, iaitu, mengklik mana-mana label akan muncul nombor siri di mana label terletak. Mengenai kod di atas, saya percaya ramai pelajar telah melihat banyak versi yang serupa, tetapi mengapa kita boleh mencapai fungsi yang kita perlukan dengan melakukan ini. Ini hanyalah pendapat peribadi saya.

Intipati pemahaman kod di atas ialah pemahaman pembolehubah i. Dalam kod ini, fungsi dijalankan ke gelung for dan mencari fungsi yang dipanggil serta-merta Pada masa ini, nilai pembolehubah masa nyata dihantar ke fungsi yang dipanggil serta-merta, dan fungsi pemprosesan acara juga disimpan nilai pembolehubah i masa nyata.

Di atas adalah keseluruhan kandungan artikel ini, saya harap ia akan membantu semua orang dalam memahami penutupan js.

Kenyataan:
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