var arr = [];
for(var i=0;i<2;i++){
arr[i]=function(i){
return function(){
return i;
}
}(i)
}
console.log(arr[0]());
解决上篇文章中的小坑,需要定义一个立即执行函数( arr[i]后边的函数就是立即执行函数 )。然后把i函数传到第一层函数中,然后最内层的函数是可以直接拿外层的i。因为js函数进得去出不来。所谓的进得去出不来,指的是函数内部可以使用全局的变量,而全局环境下无法使用函数中定义的局部变量。
还有一种解决办法就是用let来定义一个块级作用域,案例如下:
var arr = [];
for(var i=0;i<5;i++){
let j = i;
arr[i] = function(){
console.log(j);
}
}
arr[0]();
这样输入的结果是0;但是如果还是用var j=i 的话,那么又回到了之前的小坑之中。如下:
var arr = [];
for(var i=0;i<5;i++){
var j = i;
arr[i] = function(){
console.log(j);
}
}
arr[0]();
这样输出结果还是4。