【发布时间】:2013-11-03 07:58:42
【问题描述】:
在进行 nodejs 编程时,我发现了一个简单但有趣的问题。
为了轮流执行一组异步函数,我通常将“作业列表数组”与 async.series 一起使用。
按照以下步骤:
1.定义一个数组
2. 将作业函数推入数组。
3.使用async.series,顺序执行。
例如async.series(jobFunctionList, callback);
以下示例代码是简化的。
在评论中描述,它不像我预期的那样工作。
变量 'key' 和 'value' 变化
即使在 Job 函数被定义并被推入 jobList 数组之后。
似乎推送函数不断引用外部变量,
不是创建环境的值。
我找到了解决此问题的方法,但不知道为什么会这样。
var dataList = { key1: 'value1', key2: 'value2' };
var jobList = new Array();
for (var key in dataList)
{
var value = dataList[key];
jobList.push(
function (next)
{
console.log(key + ' : ' + value);
}
);
}
(jobList[0])();
(jobList[1])();
/* Expected Output :
key1 : value1
key2 : value2
*/
/* Real Output :
key2 : value2 <--- WHY ???
key2 : value2
*/
【问题讨论】:
标签: javascript node.js closures push for-in-loop