jquery嵌套函数中是否可以访问全局变量? 我有一个我无法解决的问题。一个对象属性发生变化,另一个属性不变
这就是这个
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;
}
});
}
}
我遇到的问题是对象[key] .value不保持其值。两个警报都有不同的值,所以我不能在嵌套的返回函数中使用它。对象[key] .int也会正确更新,这更令人困惑。对象被声明为全局变量。
非常感谢任何建议。
答案 0 :(得分: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/(查看控制台日志)
解释整件事情并不是必要的,因为我猜你可以查看上面提到的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)
被替换为此返回的函数。
这将为您介绍,现在如何管理范围:
key
会在for in
循环遍历object
时更改其值,但我们创建的每个回调函数都有自己的keyAlias
与之对应,它对应于使用key
(function(key) {})(key)
的值