📜  JavaScript 中按值调用与按引用调用

📅  最后修改于: 2022-05-13 01:56:52             🧑  作者: Mango

JavaScript 中按值调用与按引用调用

按值调用:假设有一个名为“a”的变量。现在,我们将原始值(布尔值、整数、浮点数等)存储在变量“a”中。

让我们在“a”中存储一个整数值,让 a=5。现在变量“a”存储了 5 并且有一个地址位置,该原始值位于内存中。

现在,假设我们通过赋值( a=b )将“a”的值复制到“b”中。现在, “b”指向内存中的一个新位置,包含与变量“a”相同的数据。

因此,a=b=5 但两者都指向内存中的不同位置。

这种方法称为按值调用,其中 2 个变量通过复制值变得相同,但在内存中的 2 个不同位置。

按值调用的特点:

  • 函数参数总是按值传递。
  • 它将函数中传递的变量的值复制到局部变量。
  • 这两个变量在内存中占据不同的位置。因此,如果对特定变量进行更改,则不会影响另一个变量。

例子:

JavaScript


Javascript


输出:“b”只是“a 的副本。它在内存中有自己的空间。当我们改变“a”时,它对“b”的值没有任何影响。

按价值

引用调用:假设我们有一个对象存储在变量“a”中。该变量存储对象所在的位置或地址。现在我们设置b=a 。现在,新变量“b”不是指向内存中的新位置,而是指向与“a”相同的位置。不创建新对象,不创建副本。两个变量都指向同一个对象。这就像有两个名字。

这是通过引用调用。它的行为与价值完全不同。所有对象都通过引用进行交互。

通过引用的特点:

  • 在 JavaScript 中,所有对象都通过引用进行交互。
  • 如果一个对象存储在一个变量中,并且该变量等于另一个变量,那么它们都在内存中占据相同的位置。
  • 一个对象变量的变化会影响另一个对象变量。

示例:在这里,当我们设置d=c时, “d”指向与“c”相同的内存位置。首先,我们有一个名称-值对存储在“c”中。现在,当我们使用“c”更改属性时,它也会更改“d”中的属性,因为两者都指向同一个对象。它影响的一个变化。

Javascript


输出:

引用

按值调用和按引用调用的区别:

Call by value

Call by reference

The original variable is not modified on changes in other variables.The original variable gets modified on changes in other variables.
Actual and copied variables will be created in different memory locations.Actual and copied variables are created in the same memory location.
On passing variables in a function, any changes made in the passed variable will not affect the original one.On passing variables in a function, any changes made in the passed parameter will update the original variable’s reference too.