为什么循环中定义的函数都返回相同的值?

时间:2015-05-07 08:41:41

标签: javascript

我对以下JavaScript代码感到困惑。我写了一个循环并在循环中定义了一个函数,但是当我调用循环中定义的函数时,我只得到10而不是索引。

显然,在下面的代码中我抽象出了不相关的东西:

objectArray = [];
for (i = 0; i< 10; i++){
    objectArray[i] = {};   
}
for (i = 0; i< 10; i++){
    objectArray[i].get_number = function(){
        return i;    
    }
}
console.log(objectArray[5].get_number()); // returns 10 rather than 5

我总是得到10而不是我的预期。

1 个答案:

答案 0 :(得分:1)

因为JavaScript关闭了。方法objectArray[i].get_number可以直接访问i(不是i的副本)。 i的值存在于内存中,因为每个方法objectArray[i].get_number仍然可以访问它。只有一个i,当循环迭代它时,它会增加一个。当方法objectArray[i].get_number访问它时,循环已经运行完成,因此它访问最终值i