JavaScript 内存分配

栈和堆

栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(后进先出,弹夹中的子弹);

堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。(书架上取书,知道地址即可)。

JavaScript中并没有严格意义上区分栈内存与堆内存,因此可以粗浅的认为都是存放在堆内存种,在理解执行上下文时,仍然需要基于堆栈数据结构的思路进行处理

原始值(原始数据类型)和引用值(复合数据类型)存储在内存中的位置分别为栈和堆

JavaScript 内存分配_第1张图片
jsStack-1.png

解释问题
var a = 10; var b = a; b = 'a'; console.log(a);//10

JavaScript 内存分配_第2张图片
Paste_Image.png

var o = { a:10, b:30 }; var o1 = o; o1.b = 10; console.log(o.b); //10

JavaScript 内存分配_第3张图片
Paste_Image.png

o和o1 存储的只是对象的引用 而o1.b修改的是对象的值 所以o.b为10;

JavaScript的内存生命周期

1.分配所需要的内存
2.使用所分配的内存 变量的读和写
3.释放内存

var a = 10; // 分配内存 a = 'use'; // 使用内存 a = null; // 释放内存

你可能感兴趣的:(JavaScript 内存分配)