Javascript 在回调函数中访问全局变量

Javascript 在回调函数中访问全局变量,javascript,node.js,Javascript,Node.js,我面临一个与变量范围相关的问题。最初将“successCount”和“failedCount”变量设置为“0”,并在每次成功/失败迭代后增加该值。但是迭代之后,只得到这些变量的初始值 var successCount = 0; var failedCount = 0; var counter = 0; var data = {}; for (var i = 0; i < 5; i++) { updateField(data, (response) => { i

我面临一个与变量范围相关的问题。最初将“successCount”和“failedCount”变量设置为“0”,并在每次成功/失败迭代后增加该值。但是迭代之后,只得到这些变量的初始值

var successCount = 0;
var failedCount = 0;
var counter = 0;
var data = {};
for (var i = 0; i < 5; i++) {
    updateField(data, (response) => {
        if (response.status) {
            successCount++;
        } else {
            failedCount++;
        }
    });
    counter++;
}
任何解决方案或我对该代码的错误


提前感谢

因为变量在回调中更新,所以您需要确保在回调之前未调用console.log

您可以尝试将更新函数转换为一个承诺,即在解析所有函数后能够运行控制台日志

var successCount=0;
var failedCount=0;
var计数器=0;
变量数据={};
函数asyncUpdateField(数据){
返回新承诺((解决)=>{
updateField(数据,(响应)=>{
如果(响应状态){
successCount++;
}否则{
失败计数++;
}
解决();
});
});
}
const promisesUpdateField=[];
对于(变量i=0;i<5;i++){
push(asyncUpdateField(数据));
}
promisesUpdateField.then(()=>{
console.log(successCount);//值仍然为0
console.log(failedCount);//值仍然为0

});看起来,函数
updateField
可能是异步的。这就是为什么在执行该函数之前调用
console.log()
,此时
successCount
failedCount
的值为
0

您确定调用在
updateField
匿名函数中进行吗?您是否也可以粘贴“响应是如何产生的”
updateField
函数如果我看得正确,您永远不会定义变量cnt。您必须检查变量计数器,而不是cnt。试试看:)@SagarChilukuri类似{status:false,response:'Failed/Success'}的响应很可能是异步的
updateField
,请看这不是变量范围问题。这是由于节点的异步性质造成的。您将在Node.js中找到许多关于如何使用异步代码的示例
if(counter === 5) {
console.log(successCount);// Value is still 0
console.log(failedCount);//  Value is still 0
}