2011-04-25 63 views
0

在這個函數:在javascript(jquery)調用中聲明匿名函數時,closure如何工作?

var x = { 
    getStuff : function(){ 
    var i = 0; 
    $.getJSON('/url.json', {}, function(data){ 
     $.each(data, function(key,val){ 
      alert(i); 
     });    
    }); 
    }); 
} 

所以,我在正確理解該聲明的2次jQuery的調用(.getJSON,。每)的匿名函數都有因關閉訪問父功能(getStuff)?

這是否意味着在該位置聲明的匿名函數位於其父項的範圍鏈中,以便它們可以訪問父項變量?

回答

0

除了通過變量「x」,匿名函數本身無法訪問「getStuff()」。他們有權訪問變量「我」,或更正確的變量「我」在實例的包含函數的本地範圍的調用匿名函數被實例化。

每次調用「getStuff()」都會創建一個新的本地作用域,每個作用域都有自己的「我」和它自己的匿名函數。

+0

所以,當你談論自己的「我」時,如果我改變「我」會改變所有引用「x」變量由於文字語法的對象? – James 2011-04-25 18:17:11

+1

@James:否 - 在進入函數的執行上下文時,會創建一個_new_ _VariableObject_(VA),並帶有新的屬性(鏈接到例如_i_) - 此對象將被放置在作用域鏈上創建/進入的任何函數_in_該上下文,所以這些將有權訪問該_i_的特定實例。但是每輸入一次函數,都會形成一個新的範圍。 – 2011-04-25 18:21:17

+0

@James什麼肖恩上面寫的是正確的。每次調用「getStuff()」都會分配一個新的存儲塊,這意味着新的「i」。 – Pointy 2011-04-25 18:25:57

相關問題