描述 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+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告