我已经读过变量存储为js中的内存引用.
因此var a = 5,具有值的存储器位置5被分配给a.
我尝试在node.js上运行它:
var a = 5;
var b = {
val: a
};
a = 6;
Run Code Online (Sandbox Code Playgroud)
我希望b.val是6,但是5,
如果我跑:
var a = 5;
var b = {
val: a
};
var c = {
value: b
}
b.val = 6;
Run Code Online (Sandbox Code Playgroud)
比c.value.val是6.
如果它们都是内存对象,为什么输出会有差异?
在javascript中,当您分配object给另一个时variable,memory reference它将被共享.它不会创建副本.与此同时,primitive values将采取与此完全相反的行动.它会在分配给另一个副本时创建一个副本variable.
你还要注意这种奇怪的情况,
var x = { a: 10 };
var y = x;
x = 5;
Run Code Online (Sandbox Code Playgroud)
初看起来,在听到关于对象的基本解释之后,每个人(新学习者)会告诉他们,y将包含5.但这是错误的.y将具有较旧的值,即{a:10}.因为在此上下文中,x将删除旧的引用,并为新的内存位置分配新值.但是Y会保留其给出的参考x.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |