栈和堆
栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(后进先出,弹夹中的子弹);
堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。(书架上取书,知道地址即可)。
JavaScript中并没有严格意义上区分栈内存与堆内存,因此可以粗浅的认为都是存放在堆内存种,在理解执行上下文时,仍然需要基于堆栈数据结构的思路进行处理
原始值(原始数据类型)和引用值(复合数据类型)存储在内存中的位置分别为栈和堆
jsStack-1.png解释问题
var a = 10; var b = a; b = 'a'; console.log(a);//10
var o = { a:10, b:30 }; var o1 = o; o1.b = 10; console.log(o.b); //10
o和o1 存储的只是对象的引用 而o1.b修改的是对象的值 所以o.b为10;
JavaScript的内存生命周期
1.分配所需要的内存
2.使用所分配的内存 变量的读和写
3.释放内存
var a = 10; // 分配内存 a = 'use'; // 使用内存 a = null; // 释放内存
网友评论