dejar la palabra clave en el bucle for
ECMAScript 6'slet
Se supone que debe proporcionar el alcance del bloque sin levantar dolores de cabeza. ¿Alguien puede explicar por qué en el código de abajo?i
en la función se resuelve el último valor del bucle (al igual que convar
) en lugar del valor de la iteración actual?
"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
De acuerdo aMDN utilizandolet
en elfor
Un bucle así debería vincular la variable en el alcance del cuerpo del bucle. Las cosas funcionan como las esperaba cuando utilizo una variable temporal dentro del bloque. ¿Por qué es necesario?
"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
Probé el guión con Traceur ynode --harmony
.