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

时间:2015-03-16 07:44:44

标签: javascript jquery scope

我有这段代码,但是我无法理解为什么当我打印'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>

1 个答案:

答案 0 :(得分:1)

使用$( document ).ready(),您只需定义一个匿名函数,只要文档结构成功构建就会调用该函数。然后打印此时为空的globalData。如果调用了您定义的函数,它会初始化globalData并看到值。

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

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