Javascript 匿名函数中的变量作用域
我试图使用jQueryJavascript 匿名函数中的变量作用域,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
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。这意味着任何当前执行的代码都将在任何异步回调之前完成。