鍍金池/ 問(wèn)答/HTML/ 特別簡(jiǎn)單的 js 變量難點(diǎn),誰(shuí)能把我整明白了

特別簡(jiǎn)單的 js 變量難點(diǎn),誰(shuí)能把我整明白了

var a = {name:"1"}
function fn(obj){
    obj.name = "2";
    obj = {name:"3"};
}
fn(a);
a.name  // "2"

為什么輸出是2

回答
編輯回答
陌顏

var a = {name:"1"}是讓變量a引用內(nèi)存中的一個(gè)對(duì)象{name:"1"}。調(diào)用fn(obj)時(shí),變量obj對(duì){name:"1"}進(jìn)行引用,然后執(zhí)行obj.name = "2";修改了引用對(duì)象的name屬性。
obj = {name:"3"};是讓變量obj引用內(nèi)存中一個(gè)新的對(duì)象{name:"3"}

2018年9月6日 01:23
編輯回答
吃藕丑

樓上說(shuō)的還不夠詳細(xì)。

clipboard.png
這里涉及到arguments,在對(duì)obj賦值之前,obj也就是

arguments[0]

一直都是對(duì)a的引用,賦值操作斷開了這個(gè)引用鏈,為obj重新指定了一個(gè)引用即一個(gè)新的對(duì)象{name:'3'}

2017年1月9日 12:15