是存储在 JavaScript 中的内存引用的变量

is a variable stored as a memory refrence in javascript?

本文关键字:内存 变量 引用 存储 JavaScript      更新时间:2023-09-26

我读到一个变量在js中存储为内存引用。

所以对于var a = 5,值为 5 的内存位置被分配给a

我尝试在节点上运行它.js:

var a = 5;
var b = {
  val: a
};
a = 6;

我希望b.val 6,但5

如果我运行:

var a = 5;
var b = {
  val: a
};
var c = {
  value: b
}
b.val = 6;

c.value.val6.

如果它们都是内存对象,为什么输出会有所不同?

在javascript中,当你将一个object分配给另一个variable时,它的memory reference将被共享。它不会创建副本。与此同时,primitive values将采取与此完全相反的行动。当它被分配给另一个variable时,它将创建一个副本。

你还必须注意这种奇怪的情况,

var x = { a: 10 };
var y = x;
x = 5;

乍一看,在听到关于对象的基本解释后,每个人(新学习者)都会说,y将包含5。但这是错误的。 y将具有较旧的值,即 {a:10} .因为在此上下文中,x 的旧引用将被切断,新值将被分配新的内存位置。但是Y将保留x给出的参考。

我已经读到一个变量在 js 中存储为内存引用。

嗯,是的,所有变量基本上都是对内存的引用 - 在所有语言中。

所以对于var a = 5,值为 5 的内存位置被分配给 a。

我会说"值5以名称写入内存位置 a "。

我希望 b.val 是 6 但 5

怎么会这样? … val: a … 表示"从名为 a 的内存位置获取值,并使用它创建名为 val 的属性。存储在那里的值是 5

在 JavaScript 中,只有对象是引用更多内存的值(特别是它们各自的属性),并且传递这样的引用值将始终引用同一组属性("对象")。所有其他值 - 所谓的原始值 - 只是不可变的值,没有引用。