在javascript中,变量是否存储为内存引用?
我读到一个变量在js中存储为内存引用 因此,对于在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中,当您将一个
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脚本中,只有对象是引用更多内存的值(特别是它们各自的属性),传递这样的引用值将始终引用同一组属性(“对象”)。所有其他值(所谓的原始值)都是不可变的值,没有引用