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)?
這是否意味着在該位置聲明的匿名函數位於其父項的範圍鏈中,以便它們可以訪問父項變量?
所以,當你談論自己的「我」時,如果我改變「我」會改變所有引用「x」變量由於文字語法的對象? – James 2011-04-25 18:17:11
@James:否 - 在進入函數的執行上下文時,會創建一個_new_ _VariableObject_(VA),並帶有新的屬性(鏈接到例如_i_) - 此對象將被放置在作用域鏈上創建/進入的任何函數_in_該上下文,所以這些將有權訪問該_i_的特定實例。但是每輸入一次函數,都會形成一個新的範圍。 – 2011-04-25 18:21:17
@James什麼肖恩上面寫的是正確的。每次調用「getStuff()」都會分配一個新的存儲塊,這意味着新的「i」。 – Pointy 2011-04-25 18:25:57