我对以下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而不是我的预期。
答案 0 :(得分:1)
因为JavaScript关闭了。方法objectArray[i].get_number
可以直接访问i
(不是i
的副本)。 i
的值存在于内存中,因为每个方法objectArray[i].get_number
仍然可以访问它。只有一个i
,当循环迭代它时,它会增加一个。当方法objectArray[i].get_number
访问它时,循环已经运行完成,因此它访问最终值i
。