javascript - 数组范围问题

标签 javascript scope global

我环顾四周几个小时,老实说我不明白为什么这不起作用。我虽然我理解范围,但我认为这与 .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) 为空的原因:

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

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

关于javascript - 数组范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318349/

相关文章:

global - Firebird 全局临时表(GTT),触摸其他表?

javascript - Algolia 自动完成筛选结果

javascript - 协调 View /调度事件

javascript - 如何访问 React JS 网络应用程序中的环境变量?

javascript - 函数范围内的可变变量

如果在 c 中的结构内定义,枚举的范围是否有限

c++ - 使用超出范围的引用成员

javascript - Gulp 使用 @import 监视和编译更少的文件

Python 将变量传递给多处理池