2012-07-19 30 views
1

是否可以通过jquery嵌套函数访问全局变量? 我有一个问题,我无法解决。一个对象的属性变化和另一个不jQuery嵌套函数中的全局变量?

的situtation是这个

for(var key in object) { 
     if(object[key].boolean) { 
      alert(object[key].value) 
      $.get(url, "data", function(data) { 
       if(parseInt(data) > object[key].int) { 
        alert(object[key].value); 
        object.int = data; 
       } 
      }); 
     } 
    } 

我遇到的问题是对象[关键] .value的不保值。两个警报都有不同的值,所以我不能在嵌套的返回函数中使用它。另外对象[key] .int被正确更新,这更令人困惑。对象被声明为全局变量。

任何建议,非常感谢。

+0

请显示演示此问题的完整示例,最好是[jsfiddle](http://jsfiddle.net)。 – JJJ 2012-07-19 13:39:32

+0

我认为你需要做'var obj = object [key];'你的第一个警报(在ajax调用之前)使它工作。 – Gavin 2012-07-19 13:39:32

+0

创建一个新的本地范围。使用['$ .each'](http://api.jquery.com/jQuery.each/)而不是'for(..){..}'。 – 2012-07-19 13:40:58

回答

0

您的匿名包装被称为GET变得后才成功,那就不叫马上,貌似像

Return a function from the anonymous wrapper?

你得到从内部关闭惊动了最后一个项目的一些情况吗?

var object = { 
    x:10, 
    y:20, 
    z:30 
}; 
for(var key in object) { 
      console.log("outside closure",object[key]); 
       $.get("/echo/html?data=asdf" ,(function(keyAlias) { 
        return function(data) { 
         console.log("inside closure",object[keyAlias],data); 
         //your logis goes here 
        } 
       })(key)); 
    } 

小提琴:http://jsfiddle.net/eTdv5/1/(检查控制台日志)

解释整个事情是,我想不会becessary,你可以检查上面提到的SO后,在什么不清楚的地方,请询问情况。

说明:

首先,key = 10

$.get("/echo/html?data=asdf" , <at this place key is 10>); 

(function(key) {})(key)就像调用display(key),认为你正在写显示功能马上与参数key调用它。

return function(data) {};会返回一个函数,实际上想像(function(key) {})(key)被这个返回函数取代。

这将会给你介绍,现在怎么范围管理:为for in的循环遍历object

key将改变它的价值,但我们创建的每个回调函数都有它的产生密切相关了自己keyAlias这对应于key的值,此时回调函数使用(function(key) {})(key)

+0

是的,物品会收到警报,但数值不同于原始警报 – CBaker 2012-07-19 13:56:23

+0

您是否始终获得从内部函数提醒的对象中的最后一个键。 – sabithpocker 2012-07-19 14:10:55

+0

我想到了,因为ajax请求异步处理,对象仍然通过for循环遍历,所以在请求返回时,对象引用是不同的。 – CBaker 2012-07-19 14:18:09