JS高阶:深入理解数据、变量、内存

数据

数据在内存中代表指定信息的“东西”,本质上是010101二进制

数据的特点
可传递、可运算
在这里插入图片描述
在这里插入图片描述

内存

内存的理解

可存储数据的空间

一个内存中有两个数据

内存存储的数据(变量)、地址值(引用地址)

内存分类

栈内存:全局变量、局部变量
堆内存:对象、引用数据类型

变量

可以变化的量,由变量名和变量值组成,每个变量都对应一块内存
变量名用来查找对应的内存,变量值就是内存中存储的数据

内存,数据,变量三者之间的关系

内存用来存储数据的空间
变量是内存的标识

JS传递变量是值传递还是地址传递?

回答一:值传递,这个值可以是基本数据也可以是引用数据(地址)
回答二:把传递的地址看做是引用(地址)传递
一般都会认为是地址传递,地址里面把存放的数据;其实深入理解就是值传递,这个值就是地址

引用变量赋值问题(重点,深入理解)

案例一

        var obj1={name:'LIDI',age:'25'}
        var obj2=obj1
        obj1.name='尤雨溪'
        console.log(obj2.name);//尤雨溪

解析:第二行代码,是将obj1的内存内容赋值给obj2,这个内存内容就是地址值,两个变量指向同一个地址。
结果为:尤雨溪

案例二

    let obj1={name:'obj1'}
    let obj2=obj1
    obj2.age=12
    console.log(obj1.age);

结果:12

案例三

     var obj1={name:"老王"}
     var obj2=obj1
     function fn(obj){
        console.log(obj.name);
        // 这个obj就是obj1
        // 这一步是把obj中的name重新赋值了
        obj.name="小王"
     }
     fn(obj1)
     console.log(obj2.name);

答案:老王 小王

案例四

     let a={age:12}
     let b=a
     a={name:'Tom',age:13}
     //这里把a重新指向了一个新对象
     console.log(a);
     console.log(b.age);

答案:Tom13
12

案例五

 let a={age:13}
    function fn1(obj){
        // 这里是重新指向了一个新对象
        // 局部变量在函数执行完后会自动销毁,无法访问
        obj={age:15}
    }
    fn1(a)
    console.log(a.age);

答案:13

案例六

   let a=3
    function fn(a){
        a=a+1
    }
    fn(a)
    console.log(a);

答案:3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值