如何将 JS 变量的值(不是引用)传递给函数?

在 JavaScript 中,函数参数可以是传值或者传引用。传引用指的是传递变量的引用地址,这样函数内部对变量的修改会影响到外部变量的值。传值则是将变量的值复制一份用于函数内部操作,这样函数内部对变量值的修改不会影响到外部变量的值。

下面介绍如何将 JavaScript 变量的值(不是引用)传递给函数:

传递基本数据类型

在 JavaScript 中,基本数据类型包括字符串、数字、布尔型、null 和 undefined。这些数据类型的特点是它们的值是固定的,而且不能被修改。

因此,在将基本数据类型传递给函数时,函数会创建一个新的内存空间用于存储传递的值,并将其作为参数传递给函数。这样,函数内部对参数的修改不会影响到原始变量的值。

下面是一个示例代码:

-------- ------------------ -
  ----- - --
  ------------------ ------ ----------- ------- -- -- -
-

--- --- - --
-----------------
---------------- ------- ----------- ----- -- -- -

上述代码中,我们定义了 changeValue 函数,该函数接受一个参数 value。在函数内部,我们将 value 的值改为 2,并在控制台中打印出了修改后的值。

然后我们定义了一个变量 num 并将其赋值为 1。接着,我们调用 changeValue 函数,并将 num 作为参数传递给函数。最后,在控制台中分别输出原始变量 num 和函数内部进行修改后的 value 的值。

可以看到,虽然在函数内部将 value 的值改为 2,但是原始变量 num 的值仍然是 1,说明传递的是值而不是引用。

传递对象和数组

在 JavaScript 中,对象和数组是引用类型。这意味着当将对象或数组作为参数传递给函数时,实际上是将变量的引用地址传递给函数。因此,函数内部对对象或数组的修改会影响到原始变量的值。

下面是一个示例代码:

-------- -------------- -
  ----- - --
  ---------------- ------ ----------- ----- -- -- - -- -- -- - -
-

--- --- - - -- -- -- - --
---------------
---------------- ------- ----------- ----- -- -- - -- -- -- - -

上述代码中,我们定义了 changeObj 函数,该函数接受一个参数 obj。在函数内部,我们将 obj 中的 a 属性的值改为 2,并在控制台中打印出了修改后的对象。

然后我们定义了一个变量 obj 并将其赋值为 { a: 1, b: 1 }。接着,我们调用 changeObj 函数,并将 obj 作为参数传递给函数。最后,在控制台中分别输出原始变量 obj 和函数内部进行修改后的 obj 的值。

可以看到,虽然在函数内部将 obj.a 的值改为 2,但是原始变量 obj 的值也被修改为 { a: 2, b: 1 },说明传递的是引用而不是值。

如果我们想要在不影响原始变量的情况下修改对象或数组,可以使用深拷贝或浅拷贝。这里不再赘述,读者可以自行学习相关内容。

总结

本文介

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/10366