javaScript基础总结---数据,变量, 内存的理解

目录

一、数据,变量, 内存的理解

1、什么是数据

2、什么是内存?

3、什么是变量? 

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

5、相关问题引出 


一、数据,变量, 内存的理解

1、什么是数据

  1. 存储在内存中代表特定信息的'东西', 本质上是0101...
  2. 数据的特点: 可传递可运算 -->let a=0;b=a 🔜体现可传递
  3. 一切皆数据
  4. 内存中所有操作的目标: 数据
  • 算术运算
  • 逻辑运算
  • 赋值
  • 运行函数

2、什么是内存?

  1. 内存条通电后产生的可储存数据的空间(临时的)
  2. 内存产生和死亡: 内存条(电路版)==>通电==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失

  3. 一块小内存的2个数据:内部存储的数据   地址值

  4. 内存分类: 栈: 全局变量/局部变量   堆: 对象

3、什么是变量? 

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

ps:变量obj.xx-->.相当于拿着地址找到后面对应的内存,所以只有当我变量中存的是地址,才可以用.

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

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

5、相关问题引出 

① 关于赋值和内存的问题

let a = xxx, a内存中到底保存的是什么?

  • xxx是基本数据, 保存的就是这个数据
  • xxx是对象, 保存的是对象的地址值
  • xxx是一个变量, 保存的xxx的内存内容(可能是基本数据, 也可能是地址值)

② 关于引用变量赋值问题

  • 2个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据

  • 2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象

  • 代码示例:

      let a = {age: 12}
    //此时是将a指向的地址值赋值给B,所以B此时也指向{age:12}这个内存
      let b = a
    //此时重新创建了一个内存并让a指向它,所以此处a指向的是{name:'hong'},而b指向仍是刚开始的指向{age:12}
      a = {name: 'hong'}
    //此时a与b指向的内存已经不一样了,所以修改互不影响
      b.age = 14
      console.log(b.age, a.name, a.age) // 14 hong undefined
      //2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象   -->所以 a 仍是  {name: 'hong'}
      const fn2=(obj) => obj = {age: 15}
      fn2(a)
      console.log(a.age) //undefined 

③ 在js调用函数时传递变量参数时, 是值传递还是引用传递

  • 理解1: 都是值(基本/地址值)传递

  • 所以实际上传进function中的参数也是拿着其存着的地址值找内存

    //传进来的obj存储的是a中存的地址值,所以obj==a(因为他们地址值一致,指向一致)
    //2个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据  -->所以被进行了修改
      let a = {name: 'hong'}
      const fn2=(obj) => obj.age= 15
      fn2(a)
      console.log(a.age) //15
  • 理解2: 可能是值传递, 也可能是引用传递(地址值)

 ④ JS引擎如何管理内存?

   1. 内存生命周期

  • 分配小内存空间, 得到它的使用权
  • 存储数据, 可以反复进行操作
  • 释放小内存空间

    2. 释放内存

  • 局部变量: 函数执行完自动释放
  • 对象: 成为垃圾对象==>垃圾回收器回收
     var a = 3
     var obj = {name:"hong"}
     obj = undefined ||null  //此时,obj没有被释放,但是之前声明的`{name:"hong"}`由于没有人指向它,会在后面你某个时刻被垃圾回收器回收
    
    function fn () { var b = {}}
     fn() // b是自动释放, b所指向的对象是在后面的某个时刻由垃圾回收器回收

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值