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 @ 2019-07-26 15:41  0x29a  阅读(545)  评论(0编辑  收藏  举报