在 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