用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中,数组和对象大多遵循引用传递。

在下面的示例中,在函数“ change”之外声明了一个名为“ a”的对象。如示例2所示,此处应注意变量'a'已被突变但未分配值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}