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