jquery嵌套函数中的全局变量?

时间:2012-07-19 13:36:54

标签: javascript jquery callback scope

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也会正确更新,这更令人困惑。对象被声明为全局变量。

非常感谢任何建议。

1 个答案:

答案 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)的值