2016-03-02 83 views
4

我读过一个变量存储为js中的内存引用。是一个变量存储为javascript中的内存引用?

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

我试了Node.js的运行以下命令:

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

我希望b.val65

如果我运行:

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

c.value.val6

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

回答

8

在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给出的参考。

2

我读过一个变量存储为js中的内存引用。

那么,是的,所有的变量基本上都是对所有语言的记忆的引用。

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

我会说“价值5写入内存位置名称a”。

我希望b.val为6,但5

怎么会这样? … val: a …表示“从内存位置获取名称为a的值,并创建一个名为val的属性,其中存储的值为5

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

相关问题