0

我已经环顾了几个小时,老实说,我不明白为什么这不起作用。我虽然理解范围,但我认为这与 .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
4

2 回答 2

2

这些是我能想到的为什么您的第二个 console.log(filters) 为空的原因:

  1. INSTAJAM.media.popular很可能是一个异步函数(它在稍后的某个时间调用它的回调可能是 ajax 调用的结果),当您执行第二个console.log(filters);时,ajax 调用尚未完成,因此您填充全局filters变量的回调尚未被调用或运行.
  2. var filters = [];并不是真正的全球性。
  3. 范围内还有另一个变量filters,因此您实际上并没有修改全局变量。

基于INSTAJAM.media.popular需要回调的结构,我的猜测是#1。异步 javascript 意味着事情不会以串行执行顺序发生。相反,您调用类似的东西INSTAJAM.media.popular(fn),稍后,当 ajax 调用完成时调用回调。这意味着在您调用之后立即定位的代码INSTAJAM.media.popular(fn)不能使用该调用的结果。相反,任何想要使用这些结果的代码都必须在回调本身中或从回调中调用。

于 2013-03-10T03:18:44.373 回答
0

你可以参考window.filters

于 2013-03-10T02:54:04.093 回答