Geben Sie das Schlüsselwort in die for-Schleife ein

ECMAScript 6'slet soll Blockumfang ohne das Heben von Kopfschmerzen zur Verfügung stellen. Kann einige erklären, warum im Code unteni in der Funktion wird auf den letzten Wert aus der Schleife aufgelöst (genau wie beivar) anstelle des Wertes aus der aktuellen Iteration?

"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
    things["fun" + i] = function() {
        console.log(i);
    };
}

things["fun0"](); // prints 3
things["fun1"](); // prints 3
things["fun2"](); // prints 3

GemäßMDN mitlet in demfor Eine solche Schleife sollte die Variable im Gültigkeitsbereich des Schleifenkörpers binden. Die Dinge funktionieren wie erwartet, wenn ich eine temporäre Variable innerhalb des Blocks verwende. Warum ist das notwendig?

"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
    let index = i;
    things["fun" + i] = function() {
        console.log(index);
    };
}

things["fun0"](); // prints 0
things["fun1"](); // prints 1
things["fun2"](); // prints 2

Ich habe das Skript mit Traceur und getestetnode --harmony.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage