###### tags: `六角JS 直播班 - 2021 秋季班` 傳值(by Value)、傳址(by Reference) === >### 在Javascript中,傳遞參數的方式可分為兩種 - 傳值(Call by value 或 Pass by value) - 傳址/傳參考(Call by reference 或是 Pass by reference) ## 傳值 除了「物件型別」以外的型別都歸類成「基本型別」,「基本型別」則會使用傳值的方式傳遞。 基本型別有以下幾種: - 字串 - 數字 - 布林 - undefined - null - symbol <br> >舉例! ```javascript= let a = "小美人魚" let b =a console.log(b) // "小美人魚" b = "小比目魚" console.log(a); // "小美人魚" console.log(b); // "小比目魚" ``` 變數b雖然值跟變數a一樣是"小美人魚",但指向的是不同的記憶體,b得到的是a的值,非a的記憶體,兩者是獨立的,所以不會互相影響。 ## 傳址 「物件型別」會使用傳址的方式傳遞: 物件型別有以下幾種: - function - object - array <br> >舉例! ```javascript= let arr1 = [1,2,3] let arr2 =arr1 console.log(arr2) //[1,2,3] arr1[0] = 7 console.log(arr1) //[7,2,3] console.log(arr2) //[7,2,3] ``` arr2指向的記憶體與arr1相同,因此若arr1的值改變,arr2也會跟著改變。 >例外! ```javascript= let arr1 = [1,2,3] let arr2 =arr1 console.log(arr2) //[1,2,3] arr1 = [4,5,6] console.log(arr1) //[4,5,6] console.log(arr2) //[1,2,3] ``` **以等號賦予arr1新的值,則會產生另一個記憶體空間**,此時arr1跟arr2不再指向同一個記憶體。 <br> >參考資料 >[JavaScript 的「傳值」與「傳址」](https://hackmd.io/@chupai/B13YRDJJB) >[[JavaScript] Javascript中的傳值 by value 與傳址 by reference](https://medium.com/itsems-frontend/javascript-pass-by-value-reference-sharing-5d6095ae030b)