Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie können Abschlüsse dazu beitragen, gemeinsame Referenzen beim Erstellen von Ereignishandlern in JavaScript-Schleifen zu vermeiden?

Barbara Streisand
Freigeben: 2024-11-07 04:07:30
Original
459 Leute haben es durchsucht

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

Erstellen von Event-Handlern mit Abschluss in Javascript

In der Javascript-Programmierung ist es üblich, Event-Handler innerhalb von Schleifen zu erstellen. Bei der Verwendung einer Syntax wie „select.onchange = function()“ ist es jedoch wichtig, sich des potenziellen Problems mit gemeinsamen Referenzen bewusst zu sein.

Wenn ein Event-Handler innerhalb einer Schleife mit dieser Syntax zugewiesen wird, kann dies zu Problemen führen an alle Event-Handler, die auf dieselben Variablen verweisen, die die in der Schleife zugewiesenen Endwerte enthalten. Dies kann dazu führen, dass für alle Ereignisse dieselben Parameter an den Ereignishandler übergeben werden, unabhängig von der einzelnen Iteration.

Um dieses Problem zu beheben und Referenzen auf gemeinsam genutzte Variablen zu verhindern, ist ein Abschluss erforderlich. Bei einem Abschluss wird eine innere Funktion erstellt, die die Variablen der äußeren Funktion per Referenz erfasst. Diese innere Funktion kann dann als Event-Handler verwendet werden, um sicherzustellen, dass jeder Event-Handler über eine eigene Kopie der Variablen aus der entsprechenden Schleifeniteration verfügt.

Für das gegebene Beispiel in der Frage zeigt der folgende Code, wie das geht Implementieren Sie einen Abschluss und übergeben Sie die richtigen Parameter an den Event-Handler:

<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>
Nach dem Login kopieren

In diesem Code gibt die innere, anonyme Funktion die Funktion zurück, die als Event-Handler verwendet wird. Die (s,c,a)-Parameter innerhalb der Funktion werden per Referenz erfasst, wodurch sichergestellt wird, dass jeder Event-Handler über seinen eigenen, eindeutigen Satz von Variablen verfügt. Dadurch werden beim Eintreten eines Ereignisses die richtigen Parameter an die onStatusChanged-Methode übergeben.

Das obige ist der detaillierte Inhalt vonWie können Abschlüsse dazu beitragen, gemeinsame Referenzen beim Erstellen von Ereignishandlern in JavaScript-Schleifen zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!