首先先确定输出的是10个10,这是因为js是单线程,先执行循环,var是全局变量会累计,再执行setTimeout
for (var i = 0;i< 10; i++){
setTimeout(() => {
console.log(i);
}, 1000)}
最简单的方法就是var改为let,将其变为块级作用域
for (let i = 0;i< 10; i++){
setTimeout(() => {
console.log(i);
}, 1000)}
其次是利用 setTimeout 函数的第三个参数,会作为回调函数的第一个参数传入
for (var i = 0; i < 10; i++) {
setTimeout(i => {
console.log(i);
}, 1000, i)
}