Ich versuche, Javascript Schließungen zu lernen. Ich habe Schwierigkeiten, die Tatsache zu verstehen, dass, wenn man mehrere Closures in einer Schleife erstellt, alle Closures nur den letzten Zustand einer Variablen speichern. Mit diesem Beispiel
var links = document.getElementsByTagName('a');
for (var x=0; x<links.length; x++) attachListener();
function attachListener() {
links[x].addEventListener('click', function(){
console.log(x);
}, false);
};
Wenn ich drei Links in meinem Dokument habe, wird beim Anklicken eines Links "3" angezeigt, vermutlich weil x nach dem letzten Durchlauf der Schleife auf 3 erhöht wurde. Ich lese in diesem ausgezeichnete Einführung dass, wenn Sie die äußere Funktion mehrmals ausführen, jedes Mal eine neue Schließung erstellt wird. Wie kommt es also, dass jede Schließung nicht jedes Mal, wenn ich die äußere Funktion aufrufe, einen anderen Wert für x speichert?
Wenn Sie x als Parameter an die äußere Funktion übergeben, funktioniert sie wie erwartet.
var links = document.getElementsByTagName('a');
for (x=0; x<links.length; x++) attachListener(x);
function attachListener(z) {
links[z].addEventListener('click', function(){
console.log(z);
}, false);
};
Jetzt erhalten Sie 0, wenn Sie den ersten Link anklicken, 1 beim zweiten usw.
Kann mir bitte jemand erklären, warum es diesen Unterschied gibt?
Prost