for (var i = 1; i <= 3; i++) {
console.log(i);
}
// 输出 1 2 3
但是
for (var i = 1; i <= 3; i++) {
setTimeout(() => {
// setTimout在for里面是异步执行的,在延迟输出的时候,i的值已经是4了
console.log(i);
}, 0);
}
// 输出 4 4 4
如何输出 1 2 3 呢?
参考答案:
1. 立即执行函数
for (var i = 1; i <= 3; i++) {
setTimeout(
(i => {
console.log(i);
})(i),
0
);
}
2. 闭包
for (var i = 1; i <= 3; i++) {
setTimeout(
(() => {
var j = i;
return function() {
console.log(j);
};
})(),
0
);
}