循环与闭包

概览

块级作用域与闭包的结合功能强大。

内容

思考:

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

分析:尽管循环中的函数是在各个迭代中分别定义,但是它们都被封闭在共享的全局作用域中,实际上只有一个i

1 利用IIFE

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

2 利用let、const:

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

你可能感兴趣的:(循环与闭包)