欢迎光临散文网 会员登陆 & 注册

javascript变量在内存中原来是这样的!

2021-02-09 13:14 作者:极客小俊GeekerJun  | 我要投稿

极客小俊

你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人!



标量类型的值 一般存储在栈区中!

标量指: 整型、浮点、字符串、布尔值、等..

对象类型分为: 对象引用 和 对象体!

对象引用存储在栈区中 、对象体存储在堆区中、


1. 内存空间基本数据存储分析图1

在这里插入图片描述


注意: 一旦new一个对象,就必然会在内存中生成新的的区域来存储对象数据

而且最重要的就是这个时候在内存中对象的地址是不一样的 , 因为 new 会生成一个新的地址在栈区中


2.对象引用类型地址传递分析图2

代码案例1:

 var json={
     "username":"张三",
     "age":22,
     "fn1":function(){
         console.log('我的名字叫'+this.username);
     }
 }
 
 //通过对象引用修改属性值1
 /*function fn2(obj){
      obj.username="李四";
 }
 fn2(json);*/
 
 //通过对象引用修改属性值2
 var a=json;
 a.username='李四';
 
 console.log(json.username);

分析图如下

在这里插入图片描述



3.对象引用类型地址传递分析图3

代码案例2:

 function Person(name,age,salary) {
     this.name=name;
     this.age=age;
     this.salary=salary;
 }
 
 function fn1(obj) {
     obj.name='王武';
     obj=new Person('李四',24,8000);
     console.log(obj.name);
 }
 
 var obj=new Person('张三',33,6000);
 
 console.log(obj.name); //结果: 张三
 
 fn1(obj);    //结果 李四
 
 console.log(obj.name);  // 王武

分析图如下

在这里插入图片描述




对象引用 图分析小结:

  1. 在js中, 普通变量值作为函数的参数就是 值传递

  2. 在js中, 对象引用类型的变量作为函数的参数 就是 址传递!

    所以 注意一下 这里的值传递址传递

  3. 一旦new一个对象 就一定会在堆区中创建一个空间,并赋予一个新地址 上面已经说过了!


4.对象数据的比较

在js中、基本数据类型数据的比较 是值的比较 值相同就可以了、

对象类型的比较 要满足两个要求、 第一是值要相同、第二引用地址也要相同才行

案例代码:

 //--案例1
 var a=[1,2,3];
 var b=[1,2,3];
 
 console.log(a==b);  //结果为false  虽然值一样,但地址是不同的!
 
 
 var a=[1,2,3];
 var b=a;
 console.log(a==b);  //结果为true  因为b指向了a这个地址,并且值也能够得到!
 
 

原理图 如下:

在这里插入图片描述


大家的支持就是我坚持下去的动力!



javascript变量在内存中原来是这样的!的评论 (共 条)

分享到微博请遵守国家法律