匿名函数中的变量范围

时间:2012-06-05 03:30:36

标签: javascript jquery

我正在尝试使用jQuery getJSON()函数中的匿名函数在JavaScript中填充数组,如下所示。

$(document).ready(function() {

    function Link(url, title) {
        this.url = url;
        this.title = title;
    }
    var links = [];

    $.getJSON("http://reddit.com/r/programming/.json?jsonp=?", function(data) {
        $.each(data.data.children, function(i, item) {
            var title = item.data.title;
            var url = item.data.url;

            links.push(new Link(url, title));
        })
    });

    for(var i=0; i< links.length; i++) {
        var output = "<a href='" + k + "'>" + links[k] + "</a>";
        $('<p>' + link + '</p>').appendTo('#content');
    }

});

但是,当我点击for循环时,链接数组显示为空。这是怎么回事?

3 个答案:

答案 0 :(得分:3)

试试:

    $(document).ready(function() {

        function Link(url, title) {
            this.url = url;
            this.title = title;
        }

        $.getJSON("http://reddit.com/r/programming/.json?jsonp=?", function(data) {
            var links = [];
            $.each(data.data.children, function(i, item) {
                var title = item.data.title;
                var url = item.data.url;

                links.push(new Link(url, title));
            })
            for(var i=0; i< links.length; i++) {
                var output = "<a href='" + k + "'>" + links[k] + "</a>";
                $('<p>' + link + '</p>').appendTo('#content');
            }
        });


    });

您的循环可能在回调之前执行;)

答案 1 :(得分:3)

那是因为$.getJSON是一种异步方法。代码执行即使在$.getJSON之后仍然继续,并且到达for循环,到那时,您的异步请求尚未完成。您应该在$.getJSON内移动循环。

答案 2 :(得分:1)

这个jsFiddle http://jsfiddle.net/cArYg/2/显示了在getJson回调之前发生的迭代