在进行 nodejs 编程时,我发现了一个简单但有趣的问题。
为了轮流执行一组异步函数,我通常将“作业列表数组”与 async.series 一起使用。
通过以下步骤:
1. 定义一个数组
2. 将作业函数推入数组。
3. 使用 async.series,按顺序执行。
例如 async.series(jobFunctionList, callback);
以下示例代码是简化的。
在评论中描述,它不像我预期的那样工作。即使在定义了 Job 函数并将其推入 jobList 数组后
,变量 'key' 和 'value' 也会发生变化。
似乎 push 函数不断引用外部变量,而不是创建环境的值。
我找到了解决此问题的解决方案,但不知道为什么会这样。
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
*/