Javascript函數內部覆蓋形參對象

2018-06-09 16:25 更新

有一個js的函數,其參數是一個object型的數據,如果在函數內部使用另外一個對象將其覆蓋,會發(fā)生什么事情呢?

現在有一個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時,這個變量引用的就是一個局部對象了。而這個局部對象會在函數執(zhí)行完畢后立即銷毀。



以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號