原文参考http://mp.weixin.qq.com/s/NGqdjhoU3MR9LD0yH6tKIw
栈-先进后出
堆-类比成书于书架(形象),只要知道Key就可以找到value
基础数据类型(Undefind,Null,Boolean,String,Number),按值访问,直接操作实际值
引用数据类型,按址访问,实际值是保存在堆内存中的对象,我们操作的是在栈中与实际值相关联的地址。
例题解析:画图就好理解
var a = 20;
var b = a;// 这里其实就是把20赋值给了b,按值传递
b = 30;
var m = {a:10,b:20}// m在栈中只是保存了一个地址,假设是x00001,{a:10,b:20}是保存在堆中的
var n = m;// 这里其实把内存中一个地址赋给了n,把x00001赋给了n,
n.a = 15;// n.a操作的是堆中{a:10,b:20},所以m.a现在也被改变为了15
js内存生命周期
简单理解
1.分配内存
2.读写数据
3.释放内存
例子:
var a = 20;
alert(a+100);
a = null;// 释放内存空间
垃圾收集器会固定时间执行一次释放操作。
垃圾回收机制的原理,简单理解就是找到不在使用的值,释放内存。
a = null让a对应的值失去引用,在垃圾收集器下次执行时释放其占用内存空间。
减少全局变量定义,手动释放全局变量占用空间,提高性能