为什么我的函数不能返回我的数组?

时间:2016-10-02 08:38:41

标签: javascript jquery arrays scope

function getContent(type) {
  var content = [];
  $.get(`/${type}.json`, function(data) {
    $.each(data, function(index, hash) {
      content.push(hash);
    });
    // 1. content = [object, object, etc..]
  });
  // 2. content = []
  return content;
}

我需要帮助理解这一点。为什么content在第二条评论中为空?从它的外观来看,该函数开始将hash推入一个名为content的NEW变量,而不是引用我在开头明确提出的内容。我该如何解决?为什么javascript范围如此令人困惑。

另外,为了解决这个问题,我是全局变量。为什么我的函数可以在函数的任何地方访问全局变量content,但在开始函数中调用content,它将无法访问某些地方。

1 个答案:

答案 0 :(得分:1)

因为$.get是异步的。这个调用的本质是它进入事件循环并且不会修改你当前的程序流程。

你应该使用回调。

function getContent(type, callback) {
  var content = [];
  $.get(`/${type}.json`, function(data) {
    $.each(data, function(index, hash) {
      content.push(hash);
    });
    callback( content );
 });
}

getContent("items", function( content ) {
   console.log(content);
});

为了给你一个更好的例子,你也可以使用你的流程,但它应该是这样的:

function getContent(type, callback) {
  var content = [];
  $.get(`/${type}.json`, function(data) {
    $.each(data, function(index, hash) {
      content.push(hash);
    });
    callback();
  });
  return content;
}

var items = getContent("items", function() {
   console.log( items );
});
相关问题