引用傳遞:(形式參數(shù)類型是引用數(shù)據(jù)類型參數(shù)):也稱為傳地址。方法調(diào)用時,實際參數(shù)是對象(或數(shù)組),這時實際參數(shù)與形式參數(shù)指向同一個地址,在方法執(zhí)行中,對形式參數(shù)的操作實際上就是對實際參數(shù)的操作,這個結(jié)果在方法結(jié)束后被保留了下來,所以方法執(zhí)行中形式參數(shù)的改變將會影響實際參數(shù)。
糾錯:第一段,引用傳遞的定義說的就是地址傳遞。后面一句“person就會自動被修改為指向其name屬性值為"Greg"的新對象”,怎么會修改呢?前面插入了新的賦值,一個在堆內(nèi)存中完全的嶄新的區(qū)塊被創(chuàng)建出來了,自然地址值就發(fā)生了改變,obj這個以前的形參變量就被覆蓋掉啦!這一步涉及到j(luò)s中函數(shù)內(nèi)部變量的優(yōu)先級問題。與引用不引用沒什么關(guān)系。函數(shù)內(nèi)部修改了參數(shù)的值,原始的引用仍然不變,這個說法有問題,obj.name = "Nicholas",這本身就是在函數(shù)內(nèi)部對堆內(nèi)存對象的修改,怎么說原始的引用不變呢,明明變了好不好?后面的說法比較正確。不過局部對象一說有些問題,在js中只有局部變量一說,何來局部對象?當(dāng)然你說變量是對象類型啊,所以稱他為局部對象也解釋的過去。不過終究這樣說容易造成誤導(dǎo)。當(dāng)然要訪問這個對象,的確只能通過該函數(shù)入口。
糾錯:第二段尼古拉所謂的對象按值傳遞的說法并無錯處,理由是地址值本身就是一個原始值,它是可以如同值傳遞一樣被覆蓋掉的。也即當(dāng)一個引用類型的實參傳進(jìn)來的時候,它是將這個引用類型的指針?biāo)加玫囊粔K內(nèi)存復(fù)制給了形參,形參具有了一塊跟實參一模一樣的內(nèi)存,但二者不是一個。當(dāng)然它倆所指向的堆內(nèi)存中的對象是一樣的。這就是尼古拉所謂的值傳遞的核心含義。