js中的数据和内存及相关问题

1.数据

存储在内存中代表特定信息的“东西”
特点:可传递、可运算
内存中所有操作的目标:数据

  • 算术运算
  • 逻辑运算
  • 赋值
  • 运行函数

2.变量

变量就是在程序运行过程中它的值允许改变的量,由变量名和变量值组成
每个变量都对应一小块内存,变量名用来查找对应的内存,变量值就是内存中保存的数据

3.内存
内存是指内存条通电后产生的可储存数据的空间(临时的)
一块内存包含两个数据:

  • 内部存储的数据
  • 地址值

在这里插入图片描述
内存分类:

  • 栈空间:存放全局变量和局部变量
  • 堆空间:存放对象等复杂数据类型

内存中到底保存的是什么呢?

var a = xxx

    <script>
       var a = 2;
       a = function() {

       };

       var b = 'abc';
       a = b;
       b = {};
       a = b;
    </script>
  • xxx是基本类型,保存的就是这个数据
  • xxx是对象,保存的就是对象的地址值
  • xxx是一个变量,保存的是xxx的内存内容(基本数据或地址值)

引用变量赋值问题

  • 两个引用变量指向同一个对象,通过其中一个变量修改对象内部数据,另一个变量看到的是修改之后的数据
   <script>
       var obj1 = {name:'Tom'};
       var obj2 = obj1;
       obj2.age = '18';
       console.log(obj1.age); // 18
       function fn(obj) {
           obj.name = 'mango';
       }
       fn(obj1);
       console.log(obj2.name);  // mango
    </script>
  • 两个引用对象指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象
    <script>
       var a = {age:12};
       var b = a;
       a = {name:'mango',age:18};
       b.age = 16;
       console.log(b.age);  //16
       console.log(a.name,a.age);  //mango 18

       function fn(obj) {
           obj = {age:15};
       }
       fn(a);
       console.log(a.age);  //18
    </script>

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

  • 理解1:都是值(基本数据/地址值)传递
  • 理解2:可能是值传递,也有可能是引用传递(地址值)
    <script>
       var a = 3;
       function fn(a) {
           a = a+1;
       }
       fn(a);
       console.log(a);  //3

       function fn2(obj) {
           console.log(obj.name);  //mango
       }
       var obj = {name:'mango'}; 
       fn2(obj);
    </script>

js引擎如何管理内存?

  • 内存生命周期:分配内存空间==> 存储数据 ==>释放内存空间
  • 释放内存
    局部变量:函数执行完后自动释放
    对象:成为垃圾对象==>垃圾回收器回收
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值