Javascript:在匿名函数中访问外部变量

时间:2014-08-16 17:43:19

标签: javascript json

请参阅以下JavaScript:

(function() {
    var allMatches = [];

    $.getJSON("myURL", function(data) {
        $.grep(data.feed.entry, function(element, index) {
            var match = {
                day: element.gsx$day.$t,
                winner: element.gsx$winner.$t,
                field: element.gsx$field.$t,
                time: element.gsx$time.$t,
                grade: element.gsx$grade.$t,
                round: element.gsx$round.$t,
                teamOne: element.gsx$team1.$t,
                teamOneGoals: element.gsx$goals.$t,
                teamOnePoints: element.gsx$points.$t,
                teamOneTotal: element.gsx$totalscore.$t,
                teamTwo: element.gsx$team2.$t,
                teamTwoGoals: element.gsx$goals_2.$t,
                teamTwoPoints: element.gsx$points_2.$t,
                teamTwoTotal: element.gsx$total.$t
            }
            allMatches[index] = match;
        });
    });

    var fridayMatches = SQLike.q(
        {
            Select: ['*'],
            From: allMatches,
            Where: function(){return this.day === "Friday"},
            OrderBy: ['field','|asc|']
        }
    );

    console.log(fridayMatches);

})();

如果我在allMatches[index] = match;放置一个断点,我可以清楚地看到这个数组已经完全填充

但是,如果我在SQLike代码的开头放下一个断点,那么allMatches就完全是空的。

为什么会这样,解决方案是什么?

2 个答案:

答案 0 :(得分:1)

Becouse $ .getJSON是异步的。

您必须将SQlite代码放入函数中并从$ .getJSON回调中调用它。

答案 1 :(得分:1)

$ .getJSON是一个Ajax调用,而Ajax标准中的“a”是异步的。

用于处理ajax响应的匿名函数在返回ajax调用之前不会运行。