JS内存空间分为栈,堆,池(一般也会归类为栈中),其中栈存放基本类型的变量和对象的引用,堆存放复杂数据类型(引用类型)分配空间,例如数组和对象都属于引用类型,池存放常量。
堆,用于复杂数据类型(引用类型)分配空间,例如数组对象、object对象;它是运行时动态分配内存的,因此存取速度较慢。
栈,主要存放一些基本类型的变量和对象的引用(包含池,池存放常量),其优势是存取速度比堆要快,并且栈内的数据可以共享,但缺点是存在栈中的数据大小与生存期必须确定,缺乏灵活性。同时栈也有有个特点跟数据结构一样,先进后出,后进先出,所以当操作数组时push 优于 unshift。
特别例子:闭包中的变量并不保存在栈内存中,而是保存在堆内存中,这就是函数调用栈之后为什么还能引用函数内的变量的原因。
function x() {
let name = "haha"
function y() {
console.log(name)
}
return y
}
网友评论