当数组很大时,如何定义一个函数数组

时间:2014-03-13 16:37:03

标签: javascript arrays

我想定义一个函数数组,所以我尝试了下面的代码,但它没有预期的结果,因为循环中的i无法在其他地方检索。

<script>
var f = []
for (var i=0; i<1000; i++){
    f[i] = function(){
        return i
    }
}
console.log(f[3]);
</script>

有蛮力的方法来编写1000行代码来定义函数,还有其他方法吗? 实际上我在Java中遇到了这个问题,Array of function pointers in Java ,所以Java或JS的答案都会有所帮助。

2 个答案:

答案 0 :(得分:2)

在循环内使用一个立即执行的函数来创建一个范围,这样你就可以为每个函数实例提供一个变量:

var f = []
for (var i=0; i<1000; i++){
  (function(i){
    f[i] = function(){
      return i;
    }
  })(i);
}
console.log(f[3]());

演示:http://jsfiddle.net/Guffa/rPKss/

答案 1 :(得分:1)

这是一个闭包/范围问题,你必须锁定i的值

<script>
var f = [];
for (var i=0; i<1000; i++){
    (function(j) {
        f[j] = function(){
            return j;
        }
    })(i); // passing as argument to IIFE makes it local to that scope
}
console.log(f[3]);
</script>