# 傳值(by Value)、傳址(by Reference 傳值:傳遞變數的值。 傳址:傳遞變數在記憶體中的「位址」。物件和陣列屬這類型。 ## 傳值 by Value Javascript 中除了物件以外的所有型別,都是基本型別,而基本型別,就只是一個純值,稱為基本型別 (Primitive type),在 Javascript 會是以傳值 by value 的方式傳遞基本型別 String、Number、Boolean、Null和Undefined..等。 > 一般基本型操作上就是使用pass by value傳遞,假設有兩個變數x和y,當我們賦予他們值時會在記憶體個別產生一個空間儲存,若是將y的值賦予給x,x變數也會再次接收到另一個新的記憶體空間,此時x和y的值雖然相同,但是個別在不一樣的記憶體空間。 ```javascript= let x = 1; let y = 2; console.log(x,y); //輸出 1 2 x = y; //將y的值賦予給x y++; console.log(x,y); //輸出 2 2 // x不因y的值更動而產生變化,因為他們儲存在不一樣的記憶體空間 ``` ## 傳址 by Reference 除了基本型別,其他型別都算是物件型別,則會以 by reference 傳址的方式傳遞:Object Array Function > 傳址與傳值不同,是針對同一個記憶體空間去做動作,在傳遞時並不會產生新的記憶體空間,因此變數若是有互相賦值的話另一個變數也會受到影響 ```javascript= let animal = { catSay : "meow" } let bird = { duckSay : "quack" } console.log(animal); //輸出{catSay: 'meow'} console.log(bird); //輸出{duckSay: 'quack'} bird = animal; animal.catSay = "me me me"; //修改animal中的值 console.log(animal); //輸出{catSay: 'me me me'} console.log(bird); //輸出{catSay: 'me me me'} ``` ![](https://i.imgur.com/8DQH3n5.png) :arrow_up:指向了同一個記憶體空間,因此當內部修改內容時再次讀取出來的值也會發生改變。 ## 參考資料 [重新認識 JavaScript: Day 05 JavaScript 是「傳值」或「傳址」](https://ithelp.ithome.com.tw/articles/10191057)) [[JavaScript] Javascript中的傳值 by value 與傳址 by reference](https://medium.com/itsems-frontend/javascript-pass-by-value-reference-sharing-5d6095ae030b)
{"metaMigratedAt":"2023-06-16T12:21:17.882Z","metaMigratedFrom":"Content","title":"傳值(by Value)、傳址(by Reference","breaks":true,"contributors":"[{\"id\":\"663fae2d-2bb5-4437-90b7-96f11a50e120\",\"add\":1403,\"del\":65}]"}
Expand menu