我正在尝试使用 JQuery .get() 方法和 JavaScript for 循环来处理来自外部文件的一些数据。我已经在 stackoverflow 上阅读了有关闭包和回调返回值的内容几个小时,但我仍然很困惑为什么这不起作用。
相对于内部回调函数,变量 headers Và countryData 的作用域不是全局的吗?它们在回调函数中按预期分配了值,但是完成后我如何访问它们?可能还有一个不使用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);
} khác {
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() 行在执行回调函数之前运行。
只有在回调函数执行后,您才能访问 headers
Và countryData
变量,并且您知道发生这种情况的唯一位置是回调函数本身内部。或它调用的其他代码。
Tôi là một lập trình viên xuất sắc, rất giỏi!