Mengakses Pembolehubah Luar dalam Gelung daripada Penutupan Javascript
Dalam JavaScript, apabila menggunakan penutupan, pembolehubah dalam gelung dirujuk oleh penuding . Ini bermakna apabila gelung selesai, nilai terakhir pembolehubah digunakan, yang membawa kepada percanggahan dalam kefungsian.
Untuk menangani masalah ini, teknik yang dipanggil penutupan boleh digunakan. Penutupan pada dasarnya adalah fungsi yang mengembalikan fungsi. Dengan merangkum pembolehubah secara berbeza menggunakan penutupan, kami boleh memastikan bahawa setiap lelaran gelung merujuk kepada nilai pembolehubah tersendiri.
Pertimbangkan kod berikut:
for (var i in this.items) { var item = this.items[i]; $("#showcasenav").append("<li id=\"showcasebutton_"+item.id+"\"><img src=\"/images/showcase/icon-"+item.id+".png\" /></li>"); $("#showcasebutton_"+item.id).click( // create an anonymous function that will scope "item" (function(item) { // that returns our function return function() { alert(item.id); self.switchto(item.id); }; })(item) // immediately call it with "item" ); }
Dalam ini kod yang diubah suai, fungsi tanpa nama dicipta dalam setiap lelaran gelung yang mengambil nilai semasa item sebagai hujah. Ini memastikan bahawa setiap pengendali klik mempunyai contoh tersendiri bagi pembolehubah item.
Sebagai alternatif, fungsi pembantu $.each() jQuery boleh digunakan untuk memudahkan kod dan menghapuskan keperluan untuk penutupan:
$.each(this.items,function(i, item) { $("#showcasenav").append("<li id=\"showcasebutton_"+item.id+"\"><img src=\"/images/showcase/icon-"+item.id+".png\" /></li>"); $("#showcasebutton_"+item.id).click(function() { alert(item.id); self.switchto(item.id); }); });
Dengan menggunakan penutupan atau jQuery's $.each(), kami boleh memastikan bahawa setiap lelaran gelung mempunyai akses kepada nilai unik pembolehubahnya sendiri, menyelesaikan isu mengakses pembolehubah luar di luar gelung.
Atas ialah kandungan terperinci Apabila Menggelung dalam Penutupan JavaScript, Bagaimana untuk Mengekalkan Akses kepada Nilai Pembolehubah Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!