CoffeeScript / JavaScript中的变量范围

时间:2011-09-13 05:33:09

标签: javascript variables coffeescript

在下面的代码中,我想使用markers变量,我期望它是一个对象数组(例如[{...},{...},{...}])。但是,根据缩进级别,变量显示一个empy数组(即[])。

jQuery ->
  markers = []
  $.getJSON '/users.json', (data) ->
    for obj in data
      marker = {}
      marker =
        lastname: namify(obj.name)
        address: obj.address
      markers.push(marker)
    console.log("3rd level", markers) # It shows the array I want.
  console.log("2nd level", markers)   # "markers" shows an empty array.

我的期望 - 第二级填充的数组。 结果 - 第二级中的空数组。

当我处于第二级时,如何在第3级中显示数组。

1 个答案:

答案 0 :(得分:4)

您正在回调函数中填充数组。所以在打印结果后会填充它。问题不在于范围,而在于执行的顺序。

如果你发出同步请求,你应该看到你的期望:

jQuery ->
  markers = []
  $.ajax
    url: '/users.json'
    dataType: 'json'
    async: false
    success: (data) ->
      for obj in data
        marker = {}
        marker =
          lastname: namify(obj.name)
          address: obj.address
        markers.push(marker)
    console.log("3rd level", markers)
  console.log("2nd level", markers)