我环顾四周几个小时,老实说我不明白为什么这不起作用。我虽然我理解范围,但我认为这与 .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
最佳答案
以下是我能想到的第二个 console.log(filters) 为空的原因:
INSTAJAM.media.popular
可能是一个异步函数(它稍后可能作为 ajax 调用的结果调用它的回调),当您执行第二个console.log(filters );
,ajax 调用尚未完成,因此填充全局filters
变量的回调尚未被调用或运行。varfilters = [];
并不是真正的全局。- 作用域内还有另一个名为
filters
的变量,因此您实际上并没有修改全局变量。
根据需要回调的 INSTAJAM.media.popular
的结构,我的猜测是#1。异步 JavaScript 意味着事情不会按串行执行顺序发生。相反,您可以调用诸如 INSTAJAM.media.popular(fn)
之类的内容,稍后,当 ajax 调用完成时,会调用回调。这意味着您调用 INSTAJAM.media.popular(fn)
之后立即定位的代码无法使用该调用的结果。相反,任何想要使用这些结果的代码都必须位于回调本身中或从回调中调用。
关于javascript - 数组范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318349/