gpt4 book ai didi

javascript - (仍然)对 javascript 闭包、ajax 和返回值更加困惑

转载 作者:行者123 更新时间:2023-11-28 21:00:09 27 4
gpt4 key购买 nike

我正在尝试使用 JQuery .get() 方法和 JavaScript for 循环来处理来自外部文件的一些数据。我已经在 stackoverflow 上阅读了有关闭包和回调返回值的内容几个小时,但我仍然很困惑为什么这不起作用。

相对于内部回调函数,变量 headerscountryData 的作用域不是全局的吗?它们在回调函数中按预期分配了值,但是完成后我如何访问它们?可能还有一个不使用alert()函数的例子?

function processData(inCSV){
var headers;
var countryData = [];
$.get(inCSV, function(data) {
var lines = data.split('\r\n');
for(var i=0;i<=lines.length-1;i++){
var lineData = lines[i].split(',');
if(i != 0){
countryData[lineData[1]] = lineData.slice(2,lineData.length);
} else {
headers = lineData.slice(2,lineData.length);
}
}
console.log('inside',headers); // output 'inside ["1971", "1972", "1973" ...'
console.log('inside',countryData['Brazil']); // output 'inside ["56.4", "54.6", ..'
});
console.log('outside',headers); // output 'outside undefined' ...!?
console.log('inside',countryData['Brazil']); // output 'outside undefined' ...!?
}

最佳答案

问题不在于闭包,问题在于异步函数。 $.get() 连接到服务器,并在服务器返回答案时运行其回调函数。但是 $.get() 在请求发送后完成,而不是在返回响应时完成。因此,最后两行 console.log() 行在执行回调函数之前运行。

只有在回调函数执行后,您才能访问 headerscountryData 变量,并且您知道发生这种情况的唯一位置是回调函数本身内部。或它调用的其他代码。

关于javascript - (仍然)对 javascript 闭包、ajax 和返回值更加困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11248543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com