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 */