描述 JavaScript 中的值傳遞和引用傳遞?


值傳遞

值傳遞中,函式透過直接傳遞變數的值作為引數來呼叫。在函式內部更改引數不會影響從函式外部傳遞的變數。Javascript 始終值傳遞,因此更改變數的值永遠不會更改底層的原始值(字串或數字)。

在下面的例子中,變數 'a' 被賦值為 1。但在 'change' 函式內部,它被賦值為 2。由於 javascript 始終是值傳遞,因此顯示的輸出將是 '1' 而不是 '2'。

示例

線上演示

<html>
<body>
<script>
   let a = 1;
   let change = (val) => {
      val = 2
   }
   change(a);
   document.write(a);
</script>
</body>
</html>

輸出

1

引用傳遞

有一些情況是傳遞地址而不是引數來呼叫函式。這時,在函式內部更改值會影響從函式外部傳遞的變數。這稱為引用傳遞。在 javascript 中,陣列和物件大多遵循引用傳遞

在下面的例子中,名為 'a' 的物件在函式 'change' 外部宣告。這裡需要注意的是,變數 'a' 發生了變異,而不是像示例 2 中那樣賦值為 2。當發生變異時,就會發生引用傳遞

示例-1

線上演示

<html>
<body>
<script>
   let a = {num:1};
   let change = (val) => {
      val.num = 2
   }
   change(a);
  document.write(JSON.stringify(a));
</script>
</body>
</html>

輸出

{"num":2}


在下面的例子中,變數 'a' 被賦值為 2,而不是變異。因此發生值傳遞,外部變數不會受到影響。

示例-2

線上演示

<html>
<body>
<script>
   let a = {num : 1};
   let change = (val) => {
      val = {num :2};
   }
   change(a);
   document.write(JSON.stringify(a));
</script>
</body>
</html>

輸出

{"num":1}

更新於:2019年7月30日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告