函数中的JavaScript匿名函数行为异常

函数中的JavaScript匿名函数行为异常,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在用javascript做一个简单的应用程序。我有一个main_脚本,可以调用所有东西。全局变量提要是一个数组,如下所示: var feeds = []; 然后,我使用函数从多个URL数组加载JSON文件: feeds = LoadJsonFeeds(urls); // Load feeds console.log("main_code feeds.length: " + feeds.length); 我后面提到的那个控制台日志。好的,现在他是我的loadjsonfeed,在不同的.js

我正在用javascript做一个简单的应用程序。我有一个main_脚本,可以调用所有东西。全局变量提要是一个数组,如下所示:

var feeds = [];
然后,我使用函数从多个URL数组加载JSON文件:

feeds = LoadJsonFeeds(urls); // Load feeds
console.log("main_code feeds.length: " + feeds.length);
我后面提到的那个控制台日志。好的,现在他是我的loadjsonfeed,在不同的.js文件中,只是一个函数:

function LoadJsonFeeds(urls) {
    var feeds_tmp = [];
    // URLs can be more - for example 50 feeds from url[0] and 20 from url[1]
    for(var u = 0; u < url.length; u++) {
        $.getJSON(url[u], function(data) {
            var allFeeds = data.Result.Items; // allFeeds without check if they are ok
            for(var i = 0; i < allFeeds.length; i++) {
                // Is feed ok?
                if (allFeeds[i].Text != null)
                {
                    // Some more checking, but lets say ok  for this
                    feeds_tmp.push(allFeeds[i]);
                }
                // This I mention later
                console.log("LoadJson feeds.length: " + feeds.length);
            }
        });
    }
    console.log("LoadJson return"); // Mention later
    return feeds_tmp;
}
我只是不明白背后的逻辑!它怎么可能首先返回一个没有任何内容的函数,然后主脚本继续。之后,函数将逐个修改全局变量feed。我怀疑匿名函数,但不知道如何处理它

我想得到什么?很简单,我想要一个函数,从URL加载JSON文件。例如,url[0]有50个提要,url[1]有20个提要。如果一切正常,那么它应该返回70个提要的数组。我第一次在main_脚本中使用它,然后每隔几秒钟调用一次更新。在这个函数中,我检查哪个提要是新的,并将其放在其他地方:

function UpdateFeeds(url) {
    console.log("updating...");

    var feeds_tmp = LoadJsonFeeds(url);
    console.log("Update feeds_tmp.length: " + feeds_tmp.length); // This is 0
    for(var f_tmp = 0; f_tmp < feeds_tmp.length; f_tmp++) { // This does not happen because feeds_tmp.length = 0
        for(var f = 0; f < feeds.length; f++) {
            // Check what feed is new and put it somewhere else (the new one)
            }
        }
    }
    feeds = feeds_tmp; // Make all new feeds the global variable
}
但由于返回的数组是0,所以不会发生forloop。但无论如何,它仍然会改变全局变量提要。对于主要功能来说,这并不重要。在全局变量中,数据都在其中,但我真的需要找到一个新的数据并对其进行一些处理。但既然不是这样,我就迷路了

我遗漏了什么,如何修复?谢谢大家!

Your console.logLoadJson feeds.length:+feeds.length;稍后调用,因为这是一个异步调用,您可以将此函数更新为

    function LoadJsonFeeds(urls,callback) {
    var feeds_tmp = [];
    // URLs can be more - for example 50 feeds from url[0] and 20 from url[1]
    for(var u = 0; u < url.length; u++) {
        $.getJSON(url[u], function(data) {
            var allFeeds = data.Result.Items; // allFeeds without check if they are ok
            for(var i = 0; i < allFeeds.length; i++) {
                // Is feed ok?
                if (allFeeds[i].Text != null)
                {
                    // Some more checking, but lets say ok  for this
                    feeds_tmp.push(allFeeds[i]);
                }
                // This I mention later
                console.log("LoadJson feeds.length: " + feeds.length);
            }
              if(u==url.length.1) // to make sure all URL loaded
                callback(feeds_tmp)
        });
    }

}

异步代码始终是异步的:p。。除非你有意让它与这样的东西同步。当然,这些评论只是为了显示它正在发生什么。谢谢,我试试这个。我怀疑使用回调,但我对javascript还是相当陌生的。
    function LoadJsonFeeds(urls,callback) {
    var feeds_tmp = [];
    // URLs can be more - for example 50 feeds from url[0] and 20 from url[1]
    for(var u = 0; u < url.length; u++) {
        $.getJSON(url[u], function(data) {
            var allFeeds = data.Result.Items; // allFeeds without check if they are ok
            for(var i = 0; i < allFeeds.length; i++) {
                // Is feed ok?
                if (allFeeds[i].Text != null)
                {
                    // Some more checking, but lets say ok  for this
                    feeds_tmp.push(allFeeds[i]);
                }
                // This I mention later
                console.log("LoadJson feeds.length: " + feeds.length);
            }
              if(u==url.length.1) // to make sure all URL loaded
                callback(feeds_tmp)
        });
    }

}
     feeds = LoadJsonFeeds(urls,function(feeds){
 console.log("main_code feeds.length: " + feeds.length);

}); // Load feeds