在 由值通,一个功能是通过直接传递变量作为参数的值调用。在函数内部更改参数不会影响从函数外部传递的变量。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。在发生突变时 会发生引用传递。
<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 ,而不是突变。因此,按值进行传递,并且不会对外部变量产生影响。
<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}