2020-11-04 js堆栈池理解

2020-11-04  本文已影响0人  SherrinfordL

JS内存空间分为栈,堆,池(一般也会归类为栈中),其中栈存放基本类型的变量和对象的引用,堆存放复杂数据类型(引用类型)分配空间,例如数组和对象都属于引用类型,池存放常量。

堆,用于复杂数据类型(引用类型)分配空间,例如数组对象、object对象;它是运行时动态分配内存的,因此存取速度较慢。

栈,主要存放一些基本类型的变量和对象的引用(包含池,池存放常量),其优势是存取速度比堆要快,并且栈内的数据可以共享,但缺点是存在栈中的数据大小与生存期必须确定,缺乏灵活性。同时栈也有有个特点跟数据结构一样,先进后出,后进先出,所以当操作数组时push 优于 unshift。

特别例子:闭包中的变量并不保存在栈内存中,而是保存在堆内存中,这就是函数调用栈之后为什么还能引用函数内的变量的原因。

function x() {
  let name = "haha"
  function y() {
      console.log(name)
  }
  return y
}
上一篇 下一篇

猜你喜欢

热点阅读