数据-变量-内存

created on 21/03/03

1、什么是数据

  • 存储在内存中代表特定的信息,本质上是0101......
  • 数据的特点:可传递var a =3; var b =a;,可运算
  • 一切皆数据
  • 内存中所有操作的目标:数据
    • 算术运算
    • 逻辑运算
    • 赋值
    • 调用函数传参

2、什么是内存

  • 内存条通电后产生的可存储数据的空间。(临时的
  • 内存产生和死亡:内存条(电路板)>通电>产生内存空间>存储数据>处理数据>断电>内存空间和数据都消失
  • 内存空间是临时的,而硬盘空间是持久的
  • 分配内存:声明变量和函数或创建对象时,js引擎会自动为此分配一定大小的内存来存放对应的数据
  • 释放内存:清空内存中的数据,标识内可以再分配使用(内存不释放就不能复用)
    • 自动释放:栈空间的局部变量
    • 垃圾回调器回调:堆空间的垃圾对象(赋空值=null)
  • 一块内存包含2个数据
    • 内部存储的数据(一般数据/地址数据)
    • 内存地址值数据
  • 内存分类
    • 栈:全局变量/局部变量(空间较小)
    • 堆:对象(空间较大)

3、什么是变量

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

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

  • 内存是一个容器,用来存储程序运行需要操作的数据

  • 变量是内存的标识,我们通过变量找到对应的内存,进而操作(读/写)内存中的数据

5、关于赋值与内存的问题

  • var a = xxx,a 内存中到底保存的是什么
    • xxx是基本数据,保存是这个数据
    • xxx是对象,保存的是对象的地址值
    • xxx是一个变量,保存的xxx的内存内容(可能是基本数据,也可能是地址值)

6、关于引用变量赋值问题

  • n个引用变量指向同一个对象,通过一个变量修改对象内部数据,其他所有变量看到的是修改后的数据,
  • 2个引用变量指向同一个变量,其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象
//1、多个引用变量指向同一个对象,通过变量修改同一个对象中的数据,指向同一个对象的其他变量可以看到修改后的数据
var obj1 = {name: 'tom'};
var obj2 = obj1;
obj1.name = 'jack';
console.log(obj2.name); //jack
function fn(obj){
    obj.name = 'A';
}
fn(obj1);
console.log(obj2.name); //A
//2、多个引用变量指向同一个对象,其中有变量指向另一个对象时,开始指向同一个对象的引用变量不能看到修改后的对象内容
var a = {age: 12};
var b = a;
console.log(b.age); //12
a = {name: 'BOB', age: 13};
b.age = 14;
console.log(a.age, a.name, b.age); //13 BOB 14
function fn2(obj){
    obj = {age:15};
}
fn2(a);
console.log(a.age); //13

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

只有值传递,没有引用传递,传递的都是变量的值,只是这个值可能是基本数据,也可能是地址(引用)数据。如果后一种看成是引用传递,那就值传递和引用传递都可以有。

  • 理解1:都是值(基本/地址值)传递
  • 理解2:可能是值传递,也可能是引用传递(地址值)
var a = 3;
function fn(a){ //(赋值)等式左边是写 形参a = 实参a
    a = a + 1;
}
fn(a);
console.log(a); //3

var obj = {name: 'tom'};
function fn2(obj){  //形参obj不是传入对象的内容,而是堆中保存内容的地址值
    console.log(obj.name);
}
fn2(obj); //tom

8、js引擎如何管理内存

  • 内存生命周期
    • 分配小内存空间,得到使用权
    • 存储数据,可以反复进行操作
    • 释放小内存空间
  • 释放内存(全局变量不会释放)
    • 局部变量:函数执行完自动释放
    • 对象:成为垃圾对象==>垃圾回收器回收
posted @ 2021-07-01 13:26  STRIVE-PHY  阅读(123)  评论(0)    收藏  举报