JS中的堆和栈

一、简介

在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。

1.栈内存

栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,**以及对象变量的指针,这时候栈内存给人的感觉就像一个线性排列的空间,每个小单元大小基本相等。

2.堆内存

堆内存主要负责像对象Object这种变量类型的存储
在这里插入图片描述
栈内存中的变量一般都是已知大小或者有范围上限的,算作一种简单存储。而堆内存存储的对象类型数据对于大小这方面,一般都是未知的。个人认为,这也是为什么null作为一个object类型的变量却存储在栈内存中的原因。

因此当我们定义一个const对象的时候,我们说的常量其实是指针,就是const对象对应的堆内存指向是不变的,但是堆内存中的数据本身的大小或者属性是可变的。而对于const定义的基础变量而言,这个值就相当于const对象的指针,是不可变。

我们常说的值类型和引用类型其实说的就是栈内存变量和堆内存变量,再想想值传递和引用传递、深拷贝和浅拷贝,都是围绕堆栈内存展开的,一个是处理值,一个是处理指针。

//第一个i是随着放到函数放到堆中,第二个是i是放到了栈中,第三个块级作用域

for (var i = 0; i < 5; i++) {
  ;(function (j) {
           setTimeout(function () {
               console.log(j)
           }, 0)
       })(i)
   }
   // 结果 0 1 2 3 4

   for (var i = 0; i < 5; i++) {
       setTimeout(function () {
           console.log(i)
       }, 0)
   }
   // 结果 5 5 5 5 5
   
  // for (let i = 0; i < 5; i++) {
    //     setTimeout(function () {
    //         console.log(i)
    //     }, 0)
    // }
    // 结果 0 1 2 3 4

链接: https://www.cnblogs.com/heioray/p/9487093.html.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值