当您将一个基本类型(如数字,字符串或布尔值)分配给JavaScript (或任何语言)中的变量时,它会在内存中打开一个插槽,将其放入,并在其上放置一个标签以便稍后引用,对吗?
var a = 1;
var b = 'foobar';
var c = false;
var d;
// What our memory would happen to look like:
var_a => 0x00 [1 ]
var_b => 0x01 ["foobar" ]
var_c => 0x02 [false ]
var_d => 0x03 [undefined ]
现在我的问题是,如何将数组,函数或对象等复合类型存储在内存中?我听说对象是在内存中创建的,变量只包含该对象的引用地址。怎么可能?从上面输入的内存表看起来,内存表只能包含一个值。
复合类型的内存中是否有特殊的插槽?数组和函数是否以与对象相同的方式存储(例如通过引用)?
答案 0 :(得分:1)
对象在内存中的某处创建,变量只包含该对象的引用地址。
是
怎么可能?从上面输入的内存表看起来,内存表只能包含一个值。
参考地址(称为“指针”) 是单个值。
内存中是否有类似复合类型的特殊插槽?
是。复合材料,也称为“struct”,可以包含多个值(但是它们是固定的),例如“描述字符串的字符串,对下一个属性的引用,以及对于单个链接的值的字段”一个对象作为链表。高级JavaScript对象存储为连接在一起的众多不同结构,以表示数据。
数组和函数的存储方式与对象相同(例如通过引用)吗?
是。但是,他们的数据结构不同,他们在不同的事情上进行了优化。