javascript中数据存储的机制

javascript中数据存储的机制

在javascript中的变量分为原始值和引用值,下面我会针对原始值和引用值的存储机制,以及javascript的内部执行的相关机制进行分析。

一、javascript中语句执行机制

在javascript文件执行中,会在内存中有一个执行操作栈,当执行到相关语句(函数)中就会将语句压入栈中,当相关语句(函数)执行完毕之后,就会从栈中弹出。
原始值在内存中的保存是在执行栈中保存的,但是对于引用值,在内存中会分配一个堆来存储引用值。当在javascript中需要用到引用值的时候,便会到这个堆中来查找相关的值,将其地址传过去。
下面是两道面试题:
一、百度面试题


```html
<script>
     let a = 12;
     let b = a;
     b = 13;
     console.log(a); //12

     let a = {n:12};
     let b = a;
     b['n'] = 13;
     console.log(a.n);  //13

    let a = {n:12};
    let b = a;
    b = {n:13};
    console.log(a.n);  //12
  </script>

解析:第一个很容易理解,第二个就是在堆中存储一个a引用值,当将a赋值给b,这里就是将b指向a的存储地址,然后将b的n改变,当然a的n就发生改变。第三个是将b指向堆中的另一个存储地址,所有当b发生改变时,a并不会发生改变。
360面试题

<script>
    let x = [12,23];
    function fn(y){
      y[0] = 100;
      y = [100];
      y[1] = 200;
      console.log(y);
    }
    fn(x);
    console.log(x);

    //[100,200] 
    //[100,23]
  </script>

解析:在该代码中首先在堆内存中存储了一个x引用值,当执行fn函数时,将该函数压入执行栈中,将x的地址传入其中,执行第一个语句将x的值改为[100,23],但是在第二条语句中将y指向[100]的内存地址,并且令y[1]= 200,所以最后打印的结果是【100,200】,但是x最终结果还是【100,23】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值