for循环中,使用闭包和不使用闭包的区别以及原因

// 问题1:判断下面一段代码运行的结果是什么?
var data = []
for (var i = 0; i < 3; i++) {
  data[i] = function() {
    console.log(i)
  }
}

data[0]()
data[1]()
data[2]()


/**
 *  运行结果
 *  3
 *  3
 *  3
 */

// 问题2:怎么修改代码可以使data[i]与i的值相同

// 方法1 使用闭包
for (var i = 0; i < 3; i++) {
  ;(function(j) {
    data[j] = function() {
      console.log(j)
    }
  })(i)
}

// 方法2 使用 let 关键字
for (let i = 0; i < 3; i++) {
  data[i] = function() {
    console.log(i)
  }
}

/**
 *  运行结果
 *  0
 *  1
 *  2
 */

  

posted @ 2020-02-23 18:07  风意不止  阅读(624)  评论(0编辑  收藏  举报