欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript中数据存储的机制

程序员文章站 2022-06-17 17:30:26
javascript中数据存储的机制在javascript中的变量分为原始值和引用值,下面我会针对原始值和引用值的存储机制,以及javascript的内部执行的相关机制进行分析。一、javascript中语句执行机制在javascript文件执行中,会在内存中有一个执行操作栈,当执行到相关语句(函数)中就会将语句压入栈中,当相关语句(函数)执行完毕之后,就会从栈中弹出。原始值在内存中的保存是在执行栈中保存的,但是对于引用值,在内存中会分配一个堆来存储引用值。当在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】

本文地址:https://blog.csdn.net/weixin_47450807/article/details/111920033