codecamp

Javascript函数内部覆盖形参对象

有一个js的函数,其参数是一个object型的数据,如果在函数内部使用另外一个对象将其覆盖,会发生什么事情呢?

现在有一个Javascript函数,如下:

var setName = function(arg) {
    arg.name = 'Wangcai';
    arg = new Object();
    arg.name = '9527';
};
var dog = new Object();
setName(dog);
console.log(dog.name);

结果:

Wangcai

这是为什么呢?

因为在函数setName中,将dog作为实参传入,在函数内部修改dogname属性,此时dog的值为{name: "WangCai"},紧接着,又new了一个新的对象覆盖了形参arg,并且随后改写了arg.name

其实此时的arg与一开始传入的形参arg已经不是同一个对象了,前者为传入的形参,后者为函数内容的局部变量。

引用《Javascript高级程序设计》书中的一句话:

当在函数内部重写引用对象arg时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即销毁。



Javascript操作Cookie
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }