js 浅析栈内存和堆内存

时间:2020-08-07 02:24:08 来源:

【摘要】 js 浅析栈内存和堆内存考必过小编为大家整理了关于js 浅析栈内存和堆内存的信息,希望可以帮助到大家!

js 浅析栈内存和堆内存

标签:undefined   ring   object   ber   浅析   对象   现在   数据类型   直接   

我们都知道js中定义变量的方式有var、let、const,let和const是es6中新增定义变量的方式,具体特性这里不再阐述。现在我们用const定义一个对象:

// const定义了一个obj对象
const obj = { a: 1, b: 2}
// 改变obj的值会报错
obj = {};
// 这样却可以成功
obj.a = 2;
console.log(obj.a);

可以看到如果直接给obj赋值为一个新对象,这时会因为const的限制报错,但是去改变obj里面的某个属性值却可以成功,为啥?下面来讲讲:

js中有栈内存和堆内存,栈内存主要是存储一些有固定大小或者有大小限制的值,堆内存主要是存储一些大小不定,动态分配大小的值。

js里面基本数据类型有String、Boolean、Number、null、undefined、symbol,引用数据类型有Array、Object、Date、RegExp等。我们在定义基本数据类型的值时,js会把它的值存储进栈内存中,可以直接去改变它的值,而当我们定义一个引用数据类型时,此时是分为两个步骤,首先因为我们的值大小是不固定的,所以需要存进堆内存中,其次js会创建一个指针(也就是一个key,对应堆内存中的值),指向存进去的这块数据,然后把这个指针存进栈内存中,通俗讲就是js在栈内存中存储了当前引用数据类型的堆内存地址,我们使用某个对象时其实是通过这个内存地址去引用堆内存中的值。

现在我们再来解释上面const的问题,const表示我们不能去改变栈内存中的值,但是堆内存中的值却可以改变。

js 浅析栈内存和堆内存

标签:undefined   ring   object   ber   浅析   对象   现在   数据类型   直接   

以上就是js 浅析栈内存和堆内存的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
vue从入门到精通系列:Vue.js 是什么 JS常见问题:xx is not defined at HTMLAnchorElement.onclick 【Web前端基础知识】关于Js中this的指向 js上传照片本地预览 JS 节流函数(throttle)与防抖函数(debounce) JS中的DFS和BFS 手写XML转化为JS对象方法 将一个json对象属性值赋值到另一个json中
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net