变量作用域和jQuery.getJSON()方法

时间:2010-04-07 18:36:38

标签: javascript jquery scope

jQuery.getJSON()方法似乎忽略了JavaScript中的范围规范。

给出这样的代码......

someObject = {
    someMethod: function(){
        var foo;

        $.getJSON('http://www.somewhere.com/some_resource', function(data){
            foo = data.bar;
        });

        alert(foo); // undefined
    }
}

someObject.someMethod();

是否有最佳实践来访问getJSON范围之外的变量值?

2 个答案:

答案 0 :(得分:2)

您的代码的问题是在JSON请求返回后(在回调函数中)设置了foo。将警报移动到回调中可以解决问题。

范围方面,代码很好。因为javascript有闭包,回调函数可以访问周围的上下文(包括foo变量)。因此,当您设置foo时,您将设置相同的变量。

答案 1 :(得分:0)

这不是getJSON()的一些奇怪的特色。这是完全正常的JS行为 - 毕竟你正在使用回调函数。回调完全分离并与它们已定义的上下文分开。

最好是你在回调中处理所有事情:

someObject = {
  someMethod: function(){
    $.getJSON('http://www.somewhere.com/some_resource', function(data) {
      var foo = data.bar;
      alert(foo);
    });
  }
}