Appearance
堆栈内存释放问题
JS 中的内存分为堆内存和栈内存
- 堆内存:存储引用数据类型值(对象:键值对 函数:代码字符串)
- 栈内存:提供 JS 代码执行的环境和存储基本类型值
堆内存释放
让所有引用堆内存空间地址的变量赋值为 null 即可(没有变量占用这个堆内存了,浏览器会在空闲的时候把它释放掉)
栈内存释放
一般情况下,当函数执行完成,所形成的私有作用域(栈内存)都会自动释放掉(在栈内存中存储的值也都会释放掉),但是也有特殊不销毁的情况:
- 函数执行完成,当前形成的栈内存中,某些内容被栈内存以外的变量占用了,此时栈内存不能释放(一旦释放外面找不到原有的内容了)
- 全局栈内存只有在页面关闭的时候才会被释放掉
如果当前栈内存没有被释放,那么之前在栈内存中存储的基本值也不会被释放,能够一直保存下来
javascript
var i = 1;
function fn(i) {
return function (n) {
console.log(n + ++i);
};
}
var f = fn(2);
f(3);
fn(5)(6);
fn(7)(8);
f(4);
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11