Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匿名函数中的变量作用域_Javascript_Jquery - Fatal编程技术网

Javascript 匿名函数中的变量作用域

Javascript 匿名函数中的变量作用域,javascript,jquery,Javascript,Jquery,我试图使用jQuerygetJSON()函数中的匿名函数在JavaScript中填充数组,如下所示 $(document).ready(function() { function Link(url, title) { this.url = url; this.title = title; } var links = []; $.getJSON("http://reddit.com/r/programming/.json?json

我试图使用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');
    }

});
$(文档).ready(函数(){
功能链接(url、标题){
this.url=url;
this.title=标题;
}
var-links=[];
$.getJSON(“http://reddit.com/r/programming/.json?jsonp=?,函数(数据){
$.each(data.data.children,函数(i,项){
var title=item.data.title;
var url=item.data.url;
links.push(新链接(url、标题));
})
});
对于(变量i=0;i)。附录(“#内容”);
}
});
但是,当我点击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');
            }
        });


    });
$(文档).ready(函数(){
功能链接(url、标题){
this.url=url;
this.title=标题;
}
$.getJSON(“http://reddit.com/r/programming/.json?jsonp=?,函数(数据){
var-links=[];
$.each(data.data.children,函数(i,项){
var title=item.data.title;
var url=item.data.url;
links.push(新链接(url、标题));
})
对于(变量i=0;i)。附录(“#内容”);
}
});
});

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

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

此JSFIDLE显示了在getJSON回调之前发生的迭代

您是否尝试在getJSON回调和for内放置断点?看到哪个先被命中了吗?尝试将函数声明移到文档外部。准备好“可能”-通过异步调用,循环肯定会在回调之前执行。这是一个异步调用,因此理论上没有任何保证。但我同意,在实践中,它将始终在之后执行。谢谢你。有没有一种方法可以实现这一点,直到所有的json数据都被提取出来,执行才会停止?我希望能够从许多json源中提取并填充数据数组(这只是我的第一个示例),然后处理各种填充的数组。(不是开始讨论,但是)我不知道有任何浏览器在多个线程上运行JS。这意味着任何当前执行的代码都将在任何异步回调之前完成。