Rumah >hujung hadapan web >tutorial js >Bagaimanakah Penutupan Boleh Membantu Mengelakkan Rujukan Dikongsi Semasa Mencipta Pengendali Acara dalam Gelung JavaScript?

Bagaimanakah Penutupan Boleh Membantu Mengelakkan Rujukan Dikongsi Semasa Mencipta Pengendali Acara dalam Gelung JavaScript?

Barbara Streisand
Barbara Streisandasal
2024-11-07 04:07:30530semak imbas

How Can Closures Help Avoid Shared References When Creating Event Handlers in JavaScript Loops?

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!

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