Avatar ·

Wie bringt man in JavaScript eine Closure in einer Schleife dazu, sich den Variablenwert bei jeder Iteration zu merken?

Hallo! Ich habe gerade angefangen, JavaScript zu lernen, und bin auf ein Problem gestoßen, das ich nicht verstehe. Ich habe eine Schleife, in der ich Event-Handler für mehrere Buttons erstelle. Jeder Button soll beim Klicken seine eigene Nummer ausgeben, aber stattdessen geben alle Buttons dieselbe Zahl aus – den letzten Wert des Zählers.

\n\n
// Buttons dynamisch erstellen\nfor (var i = 0; i < 5; i++) {\n    var btn = document.createElement('button');\n    btn.textContent = 'Button ' + i;\n    btn.addEventListener('click', function() {\n        alert('Sie haben Button Nummer ' + i + ' geklickt');\n    });\n    document.body.appendChild(btn);\n}
\n\n

Wenn ich auf einen beliebigen Button klicke, erscheint die Meldung "Sie haben Button Nummer 5 geklickt". Warum passiert das? Ich hatte erwartet, dass sich jeder Button seinen eigenen i-Wert merkt.