在javascript中,变量是否存储为内存引用?

在javascript中,变量是否存储为内存引用?,javascript,Javascript,我读到一个变量在js中存储为内存引用 因此,对于var a=5,值为5的内存位置被分配给a 我尝试在node.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.val为6 如果它们都是内存对象,为什么输出会有差异?在javascript中,当您将一个

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

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

我尝试在node.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.val
6


如果它们都是内存对象,为什么输出会有差异?

在javascript中,当您将一个
对象
分配给另一个
变量
时,它的
内存引用将被共享。它不会创建副本。同时,
原语值
的作用与此正好相反。当它被分配给另一个
变量时,它将创建一个副本

你也要注意这种奇怪的情况

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

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