在處理nodejs編程時,我發現了一個簡單而有趣的問題。
要依次執行一組異步函數,我通常在async.series中使用'job list array'。
通過以下步驟:
1.定義的陣列
2.按工作職能成陣列。
3.使用async.series,按順序執行。
例如async.series(jobFunctionList,callback);
JavaScript Closure - 將匿名函數的奇怪參考特性推送到數組
下面的示例代碼是簡化的代碼。
在評論中描述,它不工作,如我所料。
即使在定義了Job函數並將其推入jobList數組後,變量'key'和'value'也會改變
。
似乎推送的函數不斷地引用外部變量,
不是創建的情況的值。
我找到了解決此問題的解決方案,但不知道爲什麼它的工作原理如此。
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
*/