前端开发之js栈内存和堆内存的区别
2022/2/9 7:17:58
本文主要是介绍前端开发之js栈内存和堆内存的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
js中的堆内存与栈内存
在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。
和java中对内存的处理类似,栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,**以及对象变量的指针,java培训这时候栈内存给人的感觉就像一个线性排列的空间,每个小单元大小基本相等。
而堆内存主要负责像对象Object这种变量类型的存储。
栈内存中的变量一般都是已知大小或者有范围上限的,算作一种简单存储。而堆内存存储的对象类型数据对于大小这方面,一般都是未知的。
为什么const定义的值部分能改,部分不能改
当我们定义一个const对象的时候,java培训我们说的常量其实是指针,就是const对象对应的堆内存指向是不变的,但是堆内存中的数据本身的大小或者属性是可变的。而对于const定义的基础变量而言,这个值就相当于const对象的指针,是不可变。
为什么const、let定义的变量不能二次定义
每次使用const或者let去初始化一个变量的时候,会首先遍历当前的内存栈,看看有没有重名变量,有的话就返回错误。
new关键字初始化的之后是不是存储在栈内存中
根据构造函数生成新实例,这个时候生成的是对象,而不是基本类型。
let str1 = new String('123')
let str2 = new String('123')
console.log(str1==str2, str1===str2) // false false
很明显,如果str1 ,str2 是存储在栈内存中的话,两者应该是明显相等的,但结果两者并不相等,说明两者都是存储在堆内存中的,指针指向不一致。
值类型和引用类型其实说的就是栈内存变量和堆内存变量;值传递和引用传递、深拷贝和浅拷贝,都是围绕堆栈内存展开的,一个是处理值,一个是处理指针。
内存分配和垃圾回收
一般来说栈内存线性有序存储,容量小,系统分配效率高。而堆内存首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。
垃圾回收:栈内存变量基本上用完就回收了,而推内存中的变量因为存在很多不确定的引用,只有当所有调用的变量全部销毁之后才能回收。
文章来源全栈弄潮儿
这篇关于前端开发之js栈内存和堆内存的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南
- 2024-11-16Vue项目实战:新手入门指南
- 2024-11-16React Hooks之useEffect案例详解
- 2024-11-16useRef案例详解:React中的useRef使用教程
- 2024-11-16React Hooks之useState案例详解
- 2024-11-16Vue入门指南:从零开始搭建第一个Vue项目
- 2024-11-16Vue3学习:新手入门教程与实践指南
- 2024-11-16Vue3学习:从入门到初级实战教程