闭包打印数字

var + setTimeout

for(var i = 0; i < 5; i++ ){
  setTimeout(console.log(i), i * 1000);
}

// 输出结果:0 1 2 3 4
// but:setTimeout未起作用

var + setTimeout

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

// 输出结果:5 5 5 5 5

var + setTimeout + 闭包

for(var i = 0; i < 5; i++ ){
  (function(i){
    setTimeout(function(){
      console.log(i)
    }, i * 1000)
  })(i)
}

// 输出结果:0 1 2 3 4

let + setTimeout

for(let i = 0; i< 5; i++ ){
  setTimeout(() =>{
    console.log(i);
  }, i * 1000);
}

// 输出结果:0 1 2 3 4