javaScript的引用值和原始值的存放位置

Posted wyb-com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript的引用值和原始值的存放位置相关的知识,希望对你有一定的参考价值。

在js中变量可以存放两种值也就是原始值和引用值

五大原始值:number String null  boolean undefind

引用值:例如 function arry  data  Object RegExp

原始值和引用值他们的存放位置是不一样的,原始值存放在栈内存中,而引用值存放在堆内存中

 

原始值的实例:

    当我们定义了一个变量 例var  a = 123;然后再定义一个b将a赋予b ;然后在改变a的值   a = 234 ;分别alert弹出a ,b  。a的值是234 ;  b的值是123;

 

 过程详解:

   第一步在栈内存中声明一个空间 a 和声明一个空间 b 然后将值123赋值给a;然后b将a空间里的数值复制一份保存在b空间里,  最后 a = 234;是又开了一个空间存放一个234,然后让a指向它 ;而同时空间123的指向就会消失      *注意( 重新赋值并不是将原有的数值擦除然后 重写,而是重新在一个空间内写入并将名字转移过来)

 

 

引用值的实例:

          以数组为例:当我们声明一个数组,var arr = [1,2,3];  var arr1 = arr;  arr.push(4); 然后分别输出两个数组 值都是1234;

          再添加代码: arr = [5,6,7]; 然后再输出 arr和arr1  分别为 567 和1234

 

 过程详解:

       声明一个数组arr ;就是再堆内存中声明了一个空间,然后将数据存入空间内,在栈内存中声明存放一个数组的指向地址;然后再将arr的地址复制给arr1 ;紧接着像数组里添加了数字4,因为arr和arr1指向同一个空间,所以堆内存里的值改变他们都会改变;

       然后将arr重新赋值;就是重新在对内存里声明空间,然后栈内存的指向就会发生改变,所以他们的输出结果不一致

 

****重新赋值就是另声明一个空间

 

 

************有误请留言更正**************

  

    

以上是关于javaScript的引用值和原始值的存放位置的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中原始值和引用值传递

javascript原始值和引用值类型及区别

js中 原始值和引用值

关于javascript内存分配

理解Javascript_01_理解内存分配

javascript中的原始值和复杂值