Rumah >hujung hadapan web >tutorial js >Bagaimanakah Penutupan Boleh Membantu Mengelakkan Rujukan Dikongsi Semasa Mencipta Pengendali Acara dalam Gelung JavaScript?
Mencipta Pengendali Acara dengan Penutupan dalam Javascript
Dalam pengaturcaraan Javascript, adalah perkara biasa untuk mencipta pengendali acara dalam gelung. Walau bagaimanapun, apabila menggunakan sintaks seperti select.onchange = function(), adalah penting untuk mengetahui potensi isu dengan rujukan dikongsi.
Apabila pengendali acara ditugaskan dalam gelung menggunakan sintaks ini, ia boleh membawa kepada semua pengendali acara yang menunjuk kepada pembolehubah yang sama, yang akan mengandungi nilai akhir yang diberikan dalam gelung. Ini boleh menyebabkan parameter yang sama dihantar kepada pengendali acara untuk semua acara, tanpa mengira lelaran individu.
Untuk menyelesaikan isu ini dan menghalang rujukan pembolehubah yang dikongsi, penutupan diperlukan. Penutupan melibatkan penciptaan fungsi dalaman yang menangkap pembolehubah dari fungsi luar melalui rujukan. Fungsi dalaman ini kemudiannya boleh digunakan sebagai pengendali peristiwa, memastikan setiap pengendali peristiwa mempunyai salinan pembolehubahnya sendiri daripada lelaran gelung yang sepadan.
Untuk contoh yang diberikan dalam soalan, kod di bawah menunjukkan cara untuk laksanakan penutupan dan hantar parameter yang betul kepada pengendali acara:
<code class="javascript">var blah = xmlres.getElementsByTagName('blah'); for(var i = 0; i < blah.length; i++) { var td = document.createElement('td'); var select = document.createElement('select'); select.setAttribute("...", "..."); select.onchange = function(s,c,a) { return function() { onStatusChanged(s,c,a); } }(select, callid, anotherid); td.appendChild(select); }</code>
Dalam kod ini, fungsi dalaman tanpa nama mengembalikan fungsi yang digunakan sebagai pengendali acara. Parameter (s,c,a) dalam fungsi ditangkap melalui rujukan, memastikan setiap pengendali peristiwa mempunyai set pembolehubah uniknya sendiri. Akibatnya, parameter yang betul akan dihantar kepada kaedah onStatusChanged apabila peristiwa berlaku.
Atas ialah kandungan terperinci Bagaimanakah Penutupan Boleh Membantu Mengelakkan Rujukan Dikongsi Semasa Mencipta Pengendali Acara dalam Gelung JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!