【摘要】 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 浅析栈内存和堆内存的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!