我环顾了几个小时,老实说我不明白为什么这不起作用。我虽然理解了范围,但我认为这与.popular方法的回调有关。有什么建议吗?
var filters = []; //Global
INSTAJAM.media.popular(function(popular){
for (i in popular.data){
filters.push(popular.data[i].filter); //Pushing to Global
}
console.log(filters); //Works fine
});
console.log(filters); //Empty array
答案 0 :(得分:2)
这些是我能想到为什么你的第二个console.log(过滤器)为空的原因:
INSTAJAM.media.popular
可能是一个异步函数(稍后可能会因为ajax调用而调用它的回调),当你执行第二个console.log(filters);
时,ajax调用尚未完成,所以你的填充全局filters
变量的回调尚未调用或运行。var filters = [];
并非真正全球化。filters
的变量,因此您实际上并未修改全局变量。基于INSTAJAM.media.popular
进行回调的结构,我的猜测是#1。异步javascript意味着事情不会以串行执行顺序发生。相反,您调用INSTAJAM.media.popular(fn)
之类的东西,稍后,当ajax调用完成时调用回调。这意味着在您致电INSTAJAM.media.popular(fn)
后立即找到的代码无法使用该调用的结果。相反,任何想要使用这些结果的代码都必须在回调本身中,或者从回调中调用。
答案 1 :(得分:0)
您可以参考window.filters