原文出處http://mp.weixin.qq.com/s/NGqdjhoU3MR9LD0yH6tKIw 棧-先進後出堆-類比成書於書架(形象),只要知道Key就可以找到value 基礎數據類型(Undefind,Null,Boolean,String,Number),按值訪問,直接操作實際值 引用 ...
原文參考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對應的值失去引用,在垃圾收集器下次執行時釋放其占用記憶體空間。
減少全局變數定義,手動釋放全局變數占用空間,提高性能