JavaScript高级 数据 变量 内存 及相关问题

什么是数据

  • 存储在内存中代表特定信息的东西,本质上是0101......
  • 数据的特点:可传递,可运算
  • 一切皆数据
  • 内存中所有操作的目标:数据

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

    什么是内存

  • 内存条通电后产生的可存储数据的空间(临时的)
  • 内存产生和死亡:内存条(电路板)==>通电==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失
  • 一块小内存的两个数据

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

    • 栈:全局变量 / 局部变量
    • 堆:对象

    什么是变量

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

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

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

关于引用变量赋值问题

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

    var obj1 = {name:'Tom'};
    var obj2 = obj1;
    obj2.age = 12;
    consolo.log(obj1.age);   //12
    
    function fn(obj){         //obj赋值obj1
        obj.name = 'A';
    }
    fn(obj1);
    console.log(obj2.name);   //A
    
    var a = {age:12};
    var b = a;
    a = {name:'BOB',age:13};
    console.log(b.age,a.name,a.age) //12 Bob 13
    
    function fn2 (obj){
        obj={age:15}    //{age:15}赋值给obj
    }
    fn2(a)
    console.log(a.age)    //13
    

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

  • 理解1:都是值(基本/地址)传递
  • 理解2:可能是值传递,也可能是引用传递(地址值)

    var a  = 3;
    function fn (a) {
        a = a+1;
    }
    fn(a)            //3赋值给a
    console.log(a)    //3
    

function fn2 (obj) {
    console.log(obj.name);
}
var obj = {name:'tom'};
fn2(obj)

JS引擎如何管理内存

1.内存生命周期

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

2.释放内存

  • 局部变量:函数执行完自动释放
  • 对象:成为垃圾对象==>垃圾回收器回收

你可能感兴趣的:(javascript前端)