Das Objekt, das in der Funktion nicht mit var definiert ist, sollte ein globales Objekt sein.
Wenn auf Seite P71 des Little Red Book gesagt wird, dass obj intern in der Funktion umgeschrieben wird, wird diese Objektreferenz zu einem lokalen Objekt I Verstehe das nicht~~
Following the voice in heart.
特地抽出了我的紅寶書,這節(jié),說的是參數(shù)按值傳遞;然后,對(duì)象按值傳遞,傳遞的是該對(duì)象所在地的指針。所以,第一步,有一個(gè)‘name’屬性為'chen'就好理解了。
因?yàn)閛bj,是函數(shù)的參數(shù),實(shí)際意義相當(dāng)在函數(shù)內(nèi),var
了一個(gè)obj
,后期,函數(shù)執(zhí)行完,就會(huì)被銷毀。可能你看了后面的執(zhí)行環(huán)境和作用域好理解一點(diǎn)。然后,obj = new Object()
時(shí),obj的值,不是原person對(duì)象的指針了。
當(dāng)然,你把第二行代碼,換成'obj1',就有你說的全局聲明的效果了。(很認(rèn)真的答題)
看了下網(wǎng)友給的參考答案,又自己琢磨了會(huì),大概理解了,不知道對(duì)不對(duì),八九不離十了吧!
ECMAScript中所有函數(shù)的參數(shù)是按值傳遞的
所以將person對(duì)象以實(shí)參形式傳遞給setName()時(shí)是將person對(duì)象的指針復(fù)制給了setName()
假設(shè)指向person對(duì)象的原始指針為一號(hào),復(fù)制之后的指針為二號(hào)
這兩個(gè)指針同時(shí)指向person對(duì)象
所以在函數(shù)內(nèi)執(zhí)行obj.name="chen";時(shí)會(huì)根據(jù)二號(hào)指針順藤摸瓜的給person對(duì)象增加一個(gè)name屬性
但在執(zhí)行obj=new Object();時(shí),會(huì)將二號(hào)指針指向一個(gè)新對(duì)象,而不是原來的person對(duì)象
所以在執(zhí)行obj.name="long";時(shí),并不會(huì)更改person對(duì)象的name屬性
console.log(person.name);會(huì)返回"chen"
而obj即形參,并不是實(shí)參,不存在全局局部之分,在函數(shù)執(zhí)行完畢之后即被銷毀,也就是不再存在二號(hào)指針,也就不存在指向"long"這個(gè)name屬性的指針了。