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