001-函数内覆盖形参对象

<!-- lang: js -->
var setName = function(o) {
    o.name = 'aa';
    o = new Object();
    o.name = 'bb';
};

var dog = new Object();
setName(dog);
console.log(dog.name);

输出的结果是'aa'

因为在function setName中,将dog作为实参传入,在函数内部修改dog的name属性。此时dog的值为{name: 'aa'},紧接着,又new了个对象覆盖了o,并且改写了o.name属性,其实此时的o与一开始传入的形参o不是同一个对象,前者传入的形参,后者为函数内部的局部变量。

引用《javascript高级程序设计》书中的一句话回答:当在函数内部重写引用对象o时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即销毁。

你可能感兴趣的:(001-函数内覆盖形参对象)