在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重新赋值;就是重新在对内存里声明空间,然后栈内存的指向就会发生改变,所以他们的输出结果不一致
****重新赋值就是另声明一个空间
************有误请留言更正**************
原文地址:https://www.cnblogs.com/wyb-com/p/11372817.html