問題: var a = xxx, a記憶體中到底保存的是什麼? -- xxx是基本數據,保存的就是這個數據 -- XXX是物件,保存的物件的地址值 -- XXX是一個變數,保存的是xxx的記憶體內容,可能是基本數據,也可能是地址值
問題: 在js調用函數時,傳遞變數參數時, 是值傳遞(call by value)還是引用傳遞(call by reference) -- 理解1:都是值(基本 / 地址值)傳遞 -- 理解2:可能是值傳遞,也可能是引用傳遞(地址值)
關於引用變數賦值問題 -- 多個引用變數指向同一個物件,通過一個變數修改物件內部的數據,其他所有變數看到的是修改後的數據 -- 將引用變數的內容賦值給另外一個引用變數,只不過這個內容是地址值 -- 兩個引用變數指向同一個物件,讓其中一個引用變數指向另外一個物件,另一個引用變數依舊指向前一個物件
<script type="text/javascript"> let obj1 = {name: '展耀'}; let obj2 = obj1; obj1.name = 'sci'; obj2.cp = '瞳耀'; console.log(obj2.name); // sci console.log(obj2.cp); // 瞳耀 const fn = (obj) => obj.name = '白與瞳'; fn(obj1); console.log(obj2.name); // 白與瞳 let a = {age: 18}; let b = a; // 把a的地址值賦值給b,此時a和b指向的是同一個物件 a = {name: '江澄', age: 28}; // 等於a自己又創建了一個物件,此時和b已經沒有關係,a和b是兩個不同的物件 console.log(b.age); // 18 b.age = 25; // 只會改變b的age console.log(b.age, a.name, a.age); // 25, 江澄, 28 const fn2 = (obj) => obj = {age: 15}; // obj自己創建了一個物件 fn2(a); console.log(a.age); // 28 </script>
文章標籤
全站熱搜