【发布时间】:2012-10-31 20:30:42
【问题描述】:
我有以下代码:
for(var i = 0; i < list.length; i++){
mc_cli.get(list[i], function(err, response) {
do_something(i);
});
}
mc_cli 是与 memcached 数据库的连接。可以想象,回调函数是异步的,因此它可能会在 for 循环结束时执行。此外,当以这种方式调用 do_something(i) 时,它总是使用 for 循环的最后一个值。
我用这种方式尝试了闭包
do_something((function(x){return x})(i))
但显然这又总是使用 for 循环索引的最后一个值。
我也尝试在 for 循环之前声明一个函数,如下所示:
var create_closure = function(i) {
return function() {
return i;
}
}
然后调用
do_something(create_closure(i)())
但同样没有成功,返回值始终是 for 循环的最后一个值。
谁能告诉我闭包我做错了什么?我以为我理解他们,但我不明白为什么这不起作用。
【问题讨论】:
标签: javascript asynchronous for-loop closures