1. 程式人生 > >js for迴圈拆解(解析for setTimeout經典案例)

js for迴圈拆解(解析for setTimeout經典案例)

直接上程式碼

// 經典案例
for(var i=0;i<3;i++) {
  setTimeout(function () {console.log(i)}, 0)
}

// 拆解後
var i = 0;
{
  var t = i;
  setTimeout(function () {console.log(i)}, 0)
}
i++;
{
  var t = i;
  setTimeout(function () {console.log(i)}, 0)
}
i++;
{
  var t = i;
  setTimeout(function () {console.log(i)}, 0)
}
i++;

如此,你應該很容易理解解決方案裡的 let(將上例拆解後的程式碼的var都改成let即可)和IIIFE方式(同樣產生快捷作用域)了,因為該例成立的2個條件:1. 自由變數 2. 非同步阻塞