2011-12-01 83 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()中的变量,则不会在外部发生任何事情。但是因为我们引用了一个现有的对象,所以我们正在处理这个实例。我们对该对象属性所做的任何更改都会反映到访问该对象的任何其他内容中。