堆栈内存的作用

JS 中的内存堆内存和栈内存,所有堆栈内存的处理,浏览器会自行在内部执行

栈内存:

  • 提供一个供 JS 代码自上而下执行的环境(作用域,代码都是在栈内存中执行的)
  • 由于基本类型比较简单,它们都是直接在栈内存中开辟一个位置,直接把值存储进去的

堆内存:引用值对应的空间
存储引用类型的(对象:键值对,函数:代码字符串)

堆内存的释放

让所有引用堆内存空间地址的变量赋值为 null 即可,当堆内存没有被任何的变量或者其他东西引用时,就会在浏览器执行垃圾回收的时候,被销毁掉。

堆内存释放后,里面存储的值也就会被释放掉。

栈内存的释放

全局作用域会在页面关闭或者刷新的时候释放。(栈内存释放后,存储在栈内存中的值也都会销毁。

私有作用域:一般情况下,当函数执行完成,所形成的私有作用域(栈内存)都会自动释放掉,但是也有特殊的情况。

函数执行完成,当前形成的栈内存中,某些内容被栈内存意外的变量一直占用,此时栈内存不能释放,栈内存中存储的基本值也不会被释放,一直保存下来。最典型的就是闭包。

var i = 1;
function fn(i) {
return function(n) {
console.log(n + (++i));
}
}
var f = fn(2); //=> i = 2
f(3); //=>7, i = 2 n =3,执行 n + (++i) => 3 + 3 = 6
fn(5)(6); //=>12, i = 5 n = 6,执行 n + (++i) => 6 + 6 = 12
fn(7)(8); //=>16, i = 7 n = 8,执行 n + (++i) => 8 + 8 = 16
f(4); //=>8, i = 3 n = 4,执行 n + (++i) => 4 + 4 = 8
生命的意义不仅是活着,而是我们给别人的生命带来了何种不同。