JavaScript全局变量作用域问题
JavaScript global var scope issue
我不明白为什么specialArray
不保持其值在$.getJSON
之外。我以为我了解范围,任何帮助都很感激。它吐出的值控制台,但失去了值一旦它得到.getJSON
之外。什么好主意吗?
var specialArray = [];
var data, temp, regionArrayNumber;
var numberOfRegions = 29;
var chartData = [];
$(document).ready(function() {
// set up array of objects, organized by region_id
for (var j = 0; j < numberOfRegions; j++) {
temp = {
"region_id" : (j + 1),
"number_of_reads" : 0,
"bus_count" : 0,
"reads_per_bus" : 0
};
chartData.push(temp);
}
$.getJSON('https://data.cityofchicago.org/resource/historical-traffic-congestion-region.json', function(data) {
// cycle through objects, add numbers to totals
for (var i = 0; i < data.length; i++) {
regionArrayNumber = data[i].region_id - 1; // get region id, offset because of zero-based array
chartData[regionArrayNumber].bus_count += parseInt(data[i].bus_count);
chartData[regionArrayNumber].number_of_reads += parseInt(data[i].number_of_reads);
}
// calculate avg reads per bus
for (var k = 0; k < chartData.length; k++) {
chartData[k].reads_per_bus = (parseInt(data[k].number_of_reads)) / (parseInt(data[k].bus_count));
}
// set up array for google chart
for (var x = 0; x < chartData.length; x++) {
var tempArray = [];
tempArray[0] = chartData[x].region_id;
tempArray[1] = parseInt(chartData[x].number_of_reads);
specialArray.push(tempArray);
console.log("Inside: " + specialArray[x][0] + ", " + specialArray[x][1]);
}
});
console.log("Outside: " + specialArray[1][0]);
}); // end of doc.ready
好消息是你对作用域的理解很好:)
getJSON
是一个异步函数…这意味着它将启动服务调用,继续执行下一条语句(这是console.log("Outside: " + specialArray[1][0]);
),然后当服务调用完成时,它将绕过调用回调函数(您称之为'inside')。
如果你想对服务调用的结果进行操作,该代码需要驻留在回调函数中,或者由回调函数中的某些内容调用。
getJSON和类似的api是这样的原因是因为他们想确保你的代码不会"挂起",使浏览器在等待一些可能需要一段时间才能完成的事情时没有响应。一开始有点难以理解,但这对你很有帮助。
相关文章:
- AngularJS$作用域在选项卡集中出现问题
- 作用域问题-此函数是否形成闭包-JavaScript
- 访问Javascript对象-Node.js的作用域问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- “this”和内部作用域命名函数的打字稿问题
- 'simple'套接字中的作用域问题.IO服务器
- 我对按钮的作用域有问题'的听众
- Javascript作用域问题,对象在分配后没有数据
- 在DOM(html)上下文中使用角度作用域函数时出现的问题
- 可能存在Javascript作用域问题
- 本地Javascript作用域问题
- 设置Javascript函数的作用域问题
- AngularJS:图片上传+文件阅读器预览.控制器、指令和作用域之间的绑定出现问题
- 作用域和将参数传递给动态创建的事件处理程序时出现问题
- 达到 10 次摘要迭代,中止(作用域函数问题)
- Javascript 中使用 setTimeout 的作用域问题
- 作用域问题反应父子方法ES6
- jquery get中的作用域问题
- 当输入具有带作用域的指令时,Angularjs绑定会出现问题
- 绑定时出现Javascript作用域问题