這里我們討論的問(wèn)題是:JS中写妥,當(dāng)變量類型為引用類型時(shí)鸳粉,函數(shù)參數(shù)傳遞是按引用傳遞還是按值傳遞(不知道按引用傳遞和按引用傳遞的定義捌蚊,區(qū)別的話請(qǐng)自行百度)
圖片發(fā)自簡(jiǎn)書App
上圖中集畅,person類型是引用類型。現(xiàn)在我們來(lái)判斷缅糟,setName()的參數(shù)傳遞方式是按值還是按引用
如果是按值傳遞:person.name的值會(huì)是"Nicholas"挺智。因?yàn)榘粗祩鬟f的基礎(chǔ)是值的復(fù)制。obj與person存在復(fù)制關(guān)系窗宦,因此obj被賦予了name屬性的同時(shí)逃贝,person也立即與它保持一致谣辞。但引用類型的變量迫摔,其值復(fù)制帶來(lái)的"捆綁"會(huì)隨著其中一方的重新定向而結(jié)束沐扳。當(dāng)obj重新指向一個(gè)新對(duì)象后,person和它就不再有關(guān)聯(lián)了句占。此時(shí)obj的name屬性被修改沪摄,person無(wú)動(dòng)于衷。
如果是按引用傳遞:person.name的值會(huì)是"Greg"纱烘。因?yàn)榘匆脗鬟f的特點(diǎn)是杨拐,傳遞后原變量與函數(shù)參數(shù)感同身受。obj被重新導(dǎo)向擂啥,person也會(huì)被重新導(dǎo)向哄陶。