JavaScript 变量的范围在此脚本中如何工作?

How does the scope of JavaScript variables work in this script?

我有这段代码,但我无法理解为什么当我首先打印 'globalData' 时它打印所有值都很好,但稍后当我再次打印它时它只打印一个空数组?我是 JavaScript 和 jQuery 的新手。

<script>
  var globalData = [];

  $( document ).ready(function() {

    $.get( "http://....", function( data ) {

      globalData.push(data[i]);
      .
      .
      .

    });
  console.log(globalData);  //["fg", "wedsd", "hjkyu"]
  });

console.log(globalData);    //[]

</script>

使用 $( document ).ready() 时,您只需定义一个匿名函数,该函数会在文档结构成功构建后立即调用。然后你打印 globalData ,此时它是空的。如果您定义的函数被调用,它会初始化 globalData 并且您会看到这些值。

总而言之,因为您定义的回调函数被异步调用并且定义本身不会阻塞并且 returns 立即(即使 DOM 尚未加载),您打印globalData 在回调中填充值之前。

问题甚至与使用 $.get 调用的 Ajax 请求无关,即使您 运行 遇到了类似的情况。但是如果你简单地在 ready 回调中填充数组,你会遇到同样的问题。