题目:改造代码,打印0-9

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

原因:作用域,for循环中头部使用var 定义变量i 时,它和循环体中的i 的作用域不是同级作用域,因此当for循环执行完毕后,并不会给每个循环都储存相对应的i的值。

  1. 块级作用域let
for (let i = 0; i< 10; i++){
    setTimeout(() => {
        console.log(i);
    }, 1000)
}
  1. IIFE
for (var i = 0; i< 10; i++){
    setTimeout((() => {
       console.log(i);
    })(), 1000)
}
  1. 传参
    语法:setTimeout(function, milliseconds, param1, param2, …)
for (var i = 0; i< 10; i++){
    setTimeout((i) => {
       console.log(i);
    }, 1000, i)
}
for (var i = 0; i< 10; i++){
    setTimeout(function(i) {
       console.log(i);
    }.bind(null, i), 1000)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章