1

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;
                }
            });
        }
    }

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

非常感谢任何建议。

4

1 回答 1

0

您的匿名包装器仅在 get 成功后才被调用,它不会立即被调用,看起来像一些情况

从匿名包装器返回一个函数?

您是否从内部封闭处收到最后一项警报?

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 inobjectkeyAliaskey(function(key) {})(key)

于 2012-07-19T13:47:43.603 回答