Ich bin in einigen gängigen Javascript-Programmen suchen. Hier finden Sie eines fügt 4 Tasten auf den DOM und fügt einen Ereignis-Listener zu jedem von ihnenJavascript addEventListener funktioniert nicht wie erwartet
for(var i =0;i<5;i++){
var btn = document.createElement('button');
btn.appendChild(document.createTextNode('Button' + i));
//function 1
(function(i){
btn.addEventListener('click', function(){console.log(i)});
})(i);
//function 2 commented
/*btn.addEventListener('click', (function(i){
return function(){
console.log(i);
}
})(i));*/
document.body.appendChild(btn);
}
beiden Funktion 1 und Funktion 2 Add-Ereignis-Listener auf die Tasten und perfekt funktionieren. Ich möchte wissen, warum der folgende Code nicht funktioniert: -
for(var i =0;i<5;i++){
var btn = document.createElement('button');
btn.appendChild(document.createTextNode('Button' + i));
btn.addEventListener('click', function(){
console.log('Clicked' + i);
});
document.body.appendChild(btn);
}
Dieser Code protokolliert nur 5 für jede Schaltfläche beim Klicken. Warum verstehe ich das nicht, warum es einfach nicht den Wert für i für jede Schleife enthält?
sowohl in Ihrem Beispiel ist erstellen Sie eine Schließung sofort ausgeführt zu erstellen, so dass der lokale Wert von i mit dem erwarteten Ergebnis kongruent Im dritten Beispiel warten Sie, bis die Schleife beendet ist. Wenn Sie dann auf den Wert von i klicken, wird der Maximalwert der Iteration – InferOn
Mögliches Duplikat von [JavaScript closure in loops - einfaches praktisches Beispiel] (http://stackoverflow.com)/questions/750486/javascript-closure-inside-loops-simple-practical-beispiel) – jisoo