jquery嵌套函数中的全局变量

Global Variables in jquery nested functions?

本文关键字:全局变量 函数 嵌套 jquery      更新时间:2023-11-18

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

如有任何建议,我们将不胜感激。

只有在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));
    }

Fiddle: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)被这个返回的函数替换一样。

这将给你一个介绍,现在范围是如何管理的:

for in循环通过object时,key将更改其值,但我们创建的每个回调函数都有自己的keyAlias,与使用(function(key) {})(key) 装入回调函数时key的值相对应