一、栈(stack)和堆(heap)
stack 为自动分配的内存空间,它由系统自动释放;heap 则是动态分配的内存,大小也不一定会自动释放。
二、数据类型
JS分为两种数据类型:
基本数据类型:Number、String、Boolean、Null、Unfefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。
引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)。
三、基本数据类型(存放在栈中)
基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,他们是直接按值存放的,所以可以直接按值访问。
var a = 10;
var b = a;
b = 20;
console.log(a); // 10
console.log(b); // 20
下图演示了这种基本数据类型赋值的过程:
四、引用数据类型(存放在堆中的对象,每个空间大小不一样,要根据情况进行特定的配置)
引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的一个引用地址),这个指针指向堆内存。
引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址,通过这个引用地址可以快速查找到保存中堆内存中的对象。
var obj1 = new Object();
var obj2 = obj1;
obj2.name = "123";
console.log(obj1.name); // 123
说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给obj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,但是实际上他们共同指向了同一个堆内存对象,所以修改obj2其实就是修改那个对象,所以通过obj1访问也能访问的到。
这里设计深拷贝与浅拷贝://www.greatytc.com/p/5e6bc63c4afc