我如何dynamic使用for循环,将不同的参数推送到一个数组?

目前我正在尝试使用Node.JS并行运行具有不同参数的相同函数

为此,我使用Async.js,我正在努力尝试推/堆栈函数到一个数组。 问题是这些函数是用相同的参数执行的。 这是我的:

var async = require("async"); var array = []; var x = [1,2,3,4]; // This portion of code works perfect and the arguments are passed perfectly // The results that i am getting are: [100, 200, 300, 400] array.push(function(callback){ callback(null,calculate(x[0]))}); array.push(function(callback){ callback(null,calculate(x[1]))}); array.push(function(callback){ callback(null,calculate(x[2]))}); array.push(function(callback){ callback(null,calculate(x[3]))}); // This portion of code does not work and I dont know why ... // The results that i am getting are: [400, 400, 400, 400] // Obviusly the function is receiving the same argument a=4 everytime is called for (i=0;i<3;i++){ array.push(function(callback){ callback(null,calculate(x[i]))}); } async.parallel(array,function(err,result){ if (err) { console.log(err); return; } console.log("Results are: " + result); }); function calculate(a) { return a*100 } 

有什么错误的想法吗? 谢谢

试试这个,这是一个closures的问题

 for (i=0;i<3;i++){ (function(i){ array.push(function(callback){ callback(null,calculate(x[i]))}); })(i) } 

let你是你所需要的。

 'use strict'; for (let i=0;i<3;i++){ array.push(function(callback){ callback(null,calculate(x[i]))}); }