12 Stimmen

Javascript-Schließungen - Variablen vs. Parameter

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X