JavaScript中堆内存和栈内存的运作机制是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1517个文字,预计阅读时间需要7分钟。
内存分配+在编译阶段,除了声明变量和函数,还会查找环境中的标识符,进行内存分配。不同类型的数据会分配到不同的内存空间:+ 栈内存:存储函数执行时的局部变量和临时变量。+ 堆内存:动态分配的内存空间,用于存储较大的数据结构或对象。
内存分配
在编译阶段,除了声明变量和函数,查找环境中的标识符这两项工作之外,还会进行内存分配。不同类型的数据会分配到不同的内存空间:
- 栈内存:引擎执行代码时工作的内存空间,除了引擎,也用来保存基本值和引用类型值的地址。
- 堆内存:用来保存一组无序且唯一的引用类型值,可以使用栈中的键名来取得。
示意图:
赋值与赋址
引擎不能直接操作堆内存中的数据,这就造成了对同一个变量赋不同类型的值,会出现完全不同的效果:为一个变量赋基本值时,实际上是创建一个新值,然后把该值赋给新变量,可以说这是一种真正意义上的" 赋值 “;为一个变量赋引用值时,实际上是为新变量添加一个指针,指向堆内存中的一个对象,属于一种” 赋址 "操作。
本文共计1517个文字,预计阅读时间需要7分钟。
内存分配+在编译阶段,除了声明变量和函数,还会查找环境中的标识符,进行内存分配。不同类型的数据会分配到不同的内存空间:+ 栈内存:存储函数执行时的局部变量和临时变量。+ 堆内存:动态分配的内存空间,用于存储较大的数据结构或对象。
内存分配
在编译阶段,除了声明变量和函数,查找环境中的标识符这两项工作之外,还会进行内存分配。不同类型的数据会分配到不同的内存空间:
- 栈内存:引擎执行代码时工作的内存空间,除了引擎,也用来保存基本值和引用类型值的地址。
- 堆内存:用来保存一组无序且唯一的引用类型值,可以使用栈中的键名来取得。
示意图:
赋值与赋址
引擎不能直接操作堆内存中的数据,这就造成了对同一个变量赋不同类型的值,会出现完全不同的效果:为一个变量赋基本值时,实际上是创建一个新值,然后把该值赋给新变量,可以说这是一种真正意义上的" 赋值 “;为一个变量赋引用值时,实际上是为新变量添加一个指针,指向堆内存中的一个对象,属于一种” 赋址 "操作。

