2011-12-01 87 views
0

爲什麼howdothisvargetchanged在解析到changevar後得到不同的值? 當變量只存在於作用域之外時,它如何被函數改變?功能改變變量之外的變量

(function() 
{ 
var howdoesthisvargetchanged = {'a': 'a', 'B': 'B', 'C': 'C'}; 
console.log(JSON.stringify(howdoesthisvargetchanged)); 
changevar(howdoesthisvargetchanged); 
console.log(JSON.stringify(howdoesthisvargetchanged)); 
function changevar(v) 
{ 
    v['C'] = 'why does this work?'; 
} 
})(); 

回答

2

它的工作,因爲你正在傳遞howdoesthisvargetchanged參考changevar()。如果您嘗試重新分配changevar()中的變量,則不會在外部發生任何事情。但是因爲我們引用了一個現有的對象,所以我們正在處理這個實例。我們對該對象屬性所做的任何更改都會反映到訪問該對象的任何其他內容中。