0706

89 阅读1分钟

如果要下面代码输出0~9,怎么改

for (var i = 0; i < 10; i++) {
    setTimeout(() => {
        console.log(i);
    }, 0);
}

原因:异步执行,var变量提升


  1. 作用域
for (let i = 0; i < 10; i++) {
    setTimeout(() => {
        console.log(i);
    }, 0);
}
  1. 不要异步
for (let i = 0; i < 10; i++) {
    console.log(i);
}
  1. 立即执行
for (var i = 0; i < 10; i++) {
    ((i) => setTimeout(() => {
        console.log(i);
    }, 0))(i);
}
  1. setTimeout带参数
for (var i = 0; i < 10; i++) {
    setTimeout((i) => {
        console.log(i);
    }, 0, i);
}