deixe a palavra-chave no loop for
ECMAScript 6'slet
é suposto fornecer escopo de bloco sem içar dores de cabeça. Alguns podem explicar porque no código abaixoi
na função resolve para o último valor do loop (assim como comvar
) em vez do valor da iteração atual?
"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 acordo comMDN usandolet
nofor
loop como esse deve ligar a variável no escopo do corpo do loop. As coisas funcionam como eu esperava quando eu uso uma variável temporária dentro do bloco. Por que isso é necessário?
"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
Eu testei o script com Traceur enode --harmony
.