Can';t将元素推送到数组Javascript

Can';t将元素推送到数组Javascript,javascript,Javascript,我相信这很简单,但我不是一个真正的JS开发人员 我有一个函数,它将两个数组设置为一个json响应,这样我就可以将数组加载到Chart.js中 $(document).on("turbolinks:load",function(){ var months = []; var values = []; $.getJSON({url: "/reports/graph_data.json", success: function(data){ for (var

我相信这很简单,但我不是一个真正的JS开发人员

我有一个函数,它将两个数组设置为一个json响应,这样我就可以将数组加载到Chart.js中

$(document).on("turbolinks:load",function(){
    var months = [];
    var values = [];

    $.getJSON({url: "/reports/graph_data.json", success: function(data){

        for (var i = 0, len = data.length; i < len; i++) {
            months.push(data[i][0]);
            values.push(data[i][1]);
        }
        alert(months); //DISPLAYS CORRECT MONTHS
    }});

    alert(months); //DISPLAYS NOTHING
});
$(document).on(“turbolinks:load”,function()){
var月数=[];
var值=[];
$.getJSON({url:“/reports/graph_data.json”),成功:函数(数据){
对于(变量i=0,len=data.length;i
请注意,代码中有两个警报。第一个警报显示响应后的月份,如我所料,但第二个警报为空。为什么会这样?当我在getJSON函数之外引用数组时,我本以为作用域不会被破坏


提前谢谢

它没有超出范围。问题在于时机。您实际上可以清楚地看到,因为带有空数组的警报首先显示。这表明代码中的第二个
警报在第一个警报之前调用,即在调用
success
回调并将数据添加到
months
之前。出于某种原因,我认为这是一个同步呼叫,可以解释现在发生了什么。我感谢你的帮助@费利克斯克林