2012-07-19 28 views
1

是否可以通過jquery嵌套函數訪問全局變量? 我有一個問題,我無法解決。一個對象的屬性變化和另一個不jQuery嵌套函數中的全局變量?

的situtation是這個

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

我遇到的問題是對象[關鍵] .value的不保值。兩個警報都有不同的值,所以我不能在嵌套的返回函數中使用它。另外對象[key] .int被正確更新,這更令人困惑。對象被聲明爲全局變量。

任何建議,非常感謝。

+0

請顯示演示此問題的完整示例,最好是[jsfiddle](http://jsfiddle.net)。 – JJJ 2012-07-19 13:39:32

+0

我認爲你需要做'var obj = object [key];'你的第一個警報(在ajax調用之前)使它工作。 – Gavin 2012-07-19 13:39:32

+0

創建一個新的本地範圍。使用['$ .each'](http://api.jquery.com/jQuery.each/)而不是'for(..){..}'。 – 2012-07-19 13:40:58

回答

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/(檢查控制檯日誌)

解釋整個事情是,我想不會becessary,你可以檢查上面提到的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這對應於key的值,此時回調函數使用(function(key) {})(key)

+0

是的,物品會收到警報,但數值不同於原始警報 – CBaker 2012-07-19 13:56:23

+0

您是否始終獲得從內部函數提醒的對象中的最後一個鍵。 – sabithpocker 2012-07-19 14:10:55

+0

我想到了,因爲ajax請求異步處理,對象仍然通過for循環遍歷,所以在請求返回時,對象引用是不同的。 – CBaker 2012-07-19 14:18:09