JavaScript对象中的作用域问题

JavaScript对象中的作用域问题,javascript,jquery,json,oop,Javascript,Jquery,Json,Oop,我试图在JavaScript对象中创建一个数组,其中包含使用jQuery中的$.getJSON()函数从JSON文件中拉入的对象。我遇到了范围问题,似乎数组元素是在$.getJSON()函数中设置的,但在它之外,数组是空的。代码如下: function player(playlist){ ... var tracks = []; this.start = function() { ... $.getJSON(playlist, function(data){ $.eac

我试图在JavaScript对象中创建一个数组,其中包含使用jQuery中的$.getJSON()函数从JSON文件中拉入的对象。我遇到了范围问题,似乎数组元素是在$.getJSON()函数中设置的,但在它之外,数组是空的。代码如下:

function player(playlist){
...
var tracks = [];

this.start = function() {
...
    $.getJSON(playlist, function(data){
        $.each(data.tracks, function(key,value){
            var track_info = function(info){return info}(value);
            tracks.push(track_info);
        });
        console.log("from .getJSON function");
        console.log(tracks);
    });
    console.log("outside .getJSON function");
    console.log(tracks);
    ...
};
...
$(document).ready(function(){
    var the_player = new player(playlist);
    the_player.start();
)};
输出为:

outside .getJSON function
[]
from .getJSON function
[Object, Object, Object]
所有对象都包含来自JSON文件的正确数据


我对这个问题感到困惑,有人能帮我理解吗?

$。getJSON是一个AJAX调用,是异步的。这意味着您需要
console.log(“outside.getJSON函数”)。这是正在发生的事情的提示是,您在“内部”之前看到的输出是“外部”

提示的顺序是:

outside .getJSON function
[]

from .getJSON function
[Object, Object, Object]

您的外部代码在得到JSON响应之前就已经执行了,所以毫不奇怪,
tracks
是空的。这似乎与直觉相反-
from.getJSON函数
首先出现在源代码中,然后执行!这是因为
.getJSON
不是同步的。在继续下一条语句之前,它不会执行回调参数。它立即继续执行下一条语句,稍后执行回调。

Ahh!这是有道理的!那么,在继续编写代码之前,有没有一种好方法可以让.getJSON完成呢?我应该从.getJSON调用中调用下一个代码吗?@DorkRawk:“我应该从.getJSON调用中调用下一个代码吗?”-一个就搞定了!