javascript:作为参数传递时设置的变量不正确
我有以下代码和输出。我不明白为什么函数接收到错误的参数。请提供指针javascript:作为参数传递时设置的变量不正确,javascript,node.js,Javascript,Node.js,我有以下代码和输出。我不明白为什么函数接收到错误的参数。请提供指针 var tempAccounts = []; var i; for (i = 0; i < accountIDs.length; i++) { var accountID = accountIDs[i]; console.log("Log1:" + accountID); tempAccounts.push(function(callback){createTempAccount(accountID
var tempAccounts = [];
var i;
for (i = 0; i < accountIDs.length; i++) {
var accountID = accountIDs[i];
console.log("Log1:" + accountID);
tempAccounts.push(function(callback){createTempAccount(accountID, callback)})
}
async.parallel(tempAccounts, function (error, results) {
if (error) {
sendError(error, "error creating temp acounts", res, logTag);
} else {
res.set('Content-Type','application/json');
res.send(200, {});
}
});
function createTempAccount(accountID, callback)
{
console.log("Log2:" + accountID);
...
}
这里可能有什么问题?您不需要所有额外的代码来查看问题。它可以简化为以下代码段。在循环中定义函数时,将在闭包中捕获共享变量。之后调用这些函数时,只会得到一个值: var tempAccounts=[]; 让AccountId=[200400] 变量i 对于i=0;i.长度;i++{ var accountID=accountID[i]; console.log1:+accountID; tempAccounts.pushfunction{return accountID} } //同样的价值
console.logtempAccounts.mapi=>主要问题是,这并没有提供一个完整的版本,因此我建议您阅读并理解它,然后相应地更新。你可能真的是指,或者,当你说平行时,你期待的是系列。但要弄清楚你指的是哪一个才是MCVE的目的。@NeilLunn。。这是正确的答案。现在我得到了预期的输出。非常感谢你!在NodeJS中编写代码时,最好使用let而不是var。我得到了一个错误SyntaxError:块作用域声明let、const、function、class在strict Mode之外还不受支持噢,这太糟糕了,@GJain。这让事情变得容易多了。即使只是针对特定的函数,“使用strict”也不难。
Log1: 1234
Log1: abcd
Log2: 1234
Log2: 1234