03.堆栈内存释放

John Doe 2021-04-24 00:23:04
Categories: Tags:

一、概念
JavaScript里中的内存分为堆内存和栈内存:
堆内存:存储引用数据类型值(对象、函数)
栈内存:提供JS代码的执行环境、存储基本类型值

二、栈内存释放
一般情况下,当函数执行完成,所形成的私有作用域(栈内存)会自动释放掉,但以下情况除外:

如果当前栈内存没有被释放,那么栈内存中存储的基本值也不会释放。

三、堆内存释放
让所有引用堆内存空间地址的变量赋值为null即可。

四、简单的闭包例子

var x = 10;
function add(x){
    return function(y){
        console.log(x+y);
    }
}
//由add函数创建的私有作用域不回收,因为其返回值被addTen引用,私有作用域中的x和y都是私有变量,私有变量x与外部作用域的x无关
var addTen = add(x);    
addTen(20);             //30
addTen(30);             //40

//addTen指向null,不再引用add函数的返回值,由add函数创建的私有作用域进入等待回收的状态
addTen = null;

add(1)(2);              //3,执行完,等待回收,
add(5)(6);              //11,执行完,等待回收