W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
有一個(gè)js的函數(shù),其參數(shù)是一個(gè)object
型的數(shù)據(jù),如果在函數(shù)內(nèi)部使用另外一個(gè)對(duì)象將其覆蓋,會(huì)發(fā)生什么事情呢?
現(xiàn)在有一個(gè)Javascript函數(shù),如下:
var setName = function(arg) {
arg.name = 'Wangcai';
arg = new Object();
arg.name = '9527';
};
var dog = new Object();
setName(dog);
console.log(dog.name);
結(jié)果:
Wangcai
這是為什么呢?
因?yàn)樵诤瘮?shù)setName
中,將dog
作為實(shí)參傳入,在函數(shù)內(nèi)部修改dog
的name
屬性,此時(shí)dog
的值為{name: "WangCai"}
,緊接著,又new
了一個(gè)新的對(duì)象覆蓋了形參arg
,并且隨后改寫了arg.name
。
其實(shí)此時(shí)的arg
與一開始傳入的形參arg
已經(jīng)不是同一個(gè)對(duì)象了,前者為傳入的形參,后者為函數(shù)內(nèi)容的局部變量。
引用《Javascript高級(jí)程序設(shè)計(jì)》書中的一句話:
當(dāng)在函數(shù)內(nèi)部重寫引用對(duì)象
arg
時(shí),這個(gè)變量引用的就是一個(gè)局部對(duì)象了。而這個(gè)局部對(duì)象會(huì)在函數(shù)執(zhí)行完畢后立即銷毀。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: