1

jqueryのネストされた関数でグローバル変数にアクセスできますか?私は解決できない問題を抱えています。1つのオブジェクトプロパティが変更され、別のオブジェクトプロパティは変更されません

状況はこれです

    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がその値を保持していないことです。両方のアラートの値が異なるため、ネストされたreturn関数で使用できません。また、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)すぐにdisplay関数を記述し、引数を指定して呼び出すと考えてくださいkey

return function(data) {};(function(key) {})(key)関数を返します。実際には、この返された関数に置き換えられるように考えてください。

これで、スコープの管理方法を紹介します。

はループがループするときにそのkey値を変更しますが、作成した各コールバック関数には、コールバック関数が使用して作成されたときの値に対応する独自の関連付けがあります。for inobjectkeyAliaskey(function(key) {})(key)

于 2012-07-19T13:47:43.603 に答える