var arr = [];
for(var i=0; i<3; i++) {
arr[i] = function(){
console.log(i)
}
}
//输出 3 3 3
//因为闭包。即使他的上下文已经销毁,但是它仍然存在,依然引用外部变量
//改写1 利用立即执行函数 开辟封闭的变量作用域环境
for(var i=0; i<3; i++) {
(function(i){
arr[i] = function(){
console.log(i)
}
})(i)
//改写1.2
for(var i=0; i<3; i++) {
arr[i] = function(i){
return function() {
console.log(i)
}
}(i)
}
// 改写2 //利用let行程封闭作用域
for(let i=0; i<3; i++) {
arr[i] = function(){
console.log(i)
}
}
//改写3 //利用了 参数传递 按值传递
function getNumber(i) {
return function() {
console.log(i)
}
}
for(var i=0; i<3; i++) {
arr[i] = getNumber(i)
}
}