摘 —— JavaScript 中的參數傳遞是 Call by 什麼?

因為以前寫程式的時候偶爾會撞到這個雷,所以就有查了下。如果實際去搜尋,就會看到這篇 《深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?》

原作者寫得非常好,但我覺得文章太長了。能寫出整個追查的脈絡還不錯,甚至還引了 Java 和 C/C++ 來對照,功力不夠還真無法寫出這篇文章。而我之所以寫這篇文,就是想簡單地彙整「JavaScript 中的參數傳遞是 Call by 什麼?」的結論。

重點

  1. 純值(Primitive types)是 call by value,會複製一份進函式中。
  2. 物件(Object)是 / 類似 call by reference,會把該物件丟進去,不過要注意
    1. 可以在函式中改這個 object 裡面的值。
    2. 直接改變用來 Ref 的變數的話,該變數就會指到新的 object,而不影響一開始被指導的 Object。

所以傳純值進去 function 修改,並不會影響外面的值。傳 Object 進去,就要注意參數和 object 之間的連結,改參照到的 Object 的值可以更新外面的 Object,但re-assign 參數則會斷開連結。

大概就這樣而已,至於細節與範例請直接參考該篇文章,我覺得他寫得很棒。這篇文章就是所謂的「見山是山,見山不是山,見山還是山。」的經典案例。XD

也歡迎你來看看我其他 有套用「JavaScript」這個標籤 的文章。

或許你想說說