繁体   English   中英

匿名函数中的变量范围

[英]Variable scope in anonymous function

我正在尝试使用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循环时,links数组显示为空。 这里发生了什么?

尝试:

    $(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');
            }
        });


    });

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM