問題: 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,此時ab指向的是同一個物件
  a = {name: '江澄', age: 28};
  // 等於a自己又創建了一個物件,此時和b已經沒有關係,ab是兩個不同的物件
  console.log(b.age);   //  18
  b.age = 25;   // 只會改變bage
  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>

arrow
arrow
    文章標籤
    JavaScript
    全站熱搜

    bingzhichen 發表在 痞客邦 留言(0) 人氣()