Heim  >  Artikel  >  Web-Frontend  >  Warum verweisen Event-Handler in JavaScript-Schleifen auf dieselben Variablen?

Warum verweisen Event-Handler in JavaScript-Schleifen auf dieselben Variablen?

DDD
DDDOriginal
2024-11-05 20:36:02622Durchsuche

Why Do Event Handlers in JavaScript Loops Refer to the Same Variables?

Arbeiten mit Event-Handlern in JavaScript-Schleifen: Verwendung von Abschlüssen für eine eindeutige Ereignisbehandlung

In JavaScript werden bei der Arbeit mit HTML-Code Event-Handler abgespielt eine entscheidende Rolle bei der Ermöglichung von Benutzerinteraktionen mit der Webseite. Eine häufige Herausforderung entsteht jedoch, wenn diese Ereignishandler innerhalb einer Schleife definiert werden, was zu unerwartetem Verhalten führt.

Um dieses Problem zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:

<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() {
        onStatusChanged(select, callid, anotherid);
    };
    td.appendChild(select);
}

Bei einer Änderung Das Ereignis wird für ein -Methode. Element, das das Ereignis ausgelöst hat. Dieses Verhalten ergibt sich aus der Art und Weise, wie JavaScript Abschlüsse beim Definieren von Ereignishandlern implementiert.

Konkret bezieht sich der Abschluss select.onchange = function() innerhalb der Schleife auf die Variablen callid und anotherid, die die während der Schleife zugewiesenen Werte tragen letzte Iteration der Schleife. Wenn ein Ereignis ausgelöst wird, sind die Werte dieser Variablen daher nicht diejenigen, die mit dem spezifischen Element, das das Ereignis auslöst.

Das obige ist der detaillierte Inhalt vonWarum verweisen Event-Handler in JavaScript-Schleifen auf dieselben Variablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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