javascript - JavaScript 对象中的范围问题

标签 javascript jquery json oop

我正在尝试在 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 文件中的正确数据。

我对这个问题感到困惑,有人可以帮助我理解它吗?

最佳答案

提示是顺序:

outside .getJSON function
[]

随后

from .getJSON function
[Object, Object, Object]

在获得 JSON 响应之前,您的外部代码正在执行,因此毫不奇怪,tracks 为空。这可能看起来违反直觉 - from .getJSON function 首先出现在源代码中,但第二次执行!这是因为 .getJSON 不是同步的。在继续下一条语句之前,它不会执行其回调参数。它立即继续下一条语句,并稍后执行回调。

关于javascript - JavaScript 对象中的范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706000/

相关文章:

javascript - 如果使用 Bootstrap ,如何在单击按钮时将一个选项卡切换到另一个选项卡?

javascript - 使用可编辑的 div 上传图像

json - 如何将 json 转换为 typescript 接口(interface)?

ios - AFNetworking 2.0 JSON 解析

javascript - 如何在 Owl Carousel 中放置箭头?

javascript - 尝试使用 map 方法而不是使用 React Typescript 的 for 循环

javascript - fullcalendar 插件不会从数组对象添加事件

javascript - 加载 json 数据的函数应该放在哪里?

javascript - 如何从 bigquery nodejs api 获取整数?

javascript - 在 div 中向下滚动(在 Firefox 和 IE 中!)