如何在JavaScript中实现这个函数的闭包?
问题描述:
昨晚,我谷歌搜索了很多,找不到解决方案,我的问题: 我有一个for
循环与一个函数,它只让我从数组中的最新值。如何在JavaScript中实现这个函数的闭包?
所以,这里是例子:
obj1.route = new Routeng();
obj2.route = new Routeng();
for(var x in arrObjs) { //arrObjs = array of objects
var g = arrObjs[x];
// I can access properties of all "g" objects
Routelousse.gen(function(res) {
var pathern = res.pathern;
g.routel.staviPather(pathern);
MYOBJ.vehicles.push(g);
alert(g.name); // during the loop I always get the LAST "g" object from "arrObjs"
}, g.point);
}
答
它应该是这样的:
obj1.route = new Routeng();
obj2.route = new Routeng();
for(var x=0; x<arrObjs.length; x++) {
var g = arrObjs[x];
(function(ig) {
Routelousse.gen(function(res) {
var pathern = res.pathern;
ig.routel.staviPather(pathern);
MYOBJ.vehicles.push(ig);
alert(ig.name);
}, ig.point);
})(g);
}
在此我们传递当前g
成自动执行功能不同的变量,而不是g
,它在您当前正在使用的函数中共享(这不是块范围),并且正在更改for
循环的每次通过。
还要注意for
循环改变的......你永远不应该使用for...in
循环来迭代阵列,使用普通的for
环路这一点。
+0
THANX !!这个伎俩,帮助我很多! – 2010-11-17 10:12:14
+0
@达科 - 欢迎! – 2010-11-17 10:20:49
不清楚(对我)你要求什么? – annakata 2010-11-17 10:09:00
@annakata - 因为JavaScript在这里没有代码块范围,所以''''循环传递每次都使用相同的'g',所以在异步函数完成时使用不正确的代码。 – 2010-11-17 10:11:26
@annakata - thanx,但尼克解决了我的问题! – 2010-11-17 10:14:30