1、相关概念

内存的分类:

  栈:全局变量,局部变量

  堆:对象

变量:

  值可以变化的量, 由变量名与变量值组成

  一个变量对应一块小内存, 变量名用来查找到内存, 变量值就是内存中保存的内容

 

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

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

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

 

2、引用变量赋值问题

两个引用变量指向同一个对象(地址)时,通过一个引用变量修改对象内部数据,另一个引用变量也能看见

两个引用变量指向同一个对象, 让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象

//2. 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
  var obj3 = {name: 'Tom'}
  var obj4 = obj3
  obj3 = {name: 'JACK'}
  console.log()
  function f2(obj) {
    obj = {name: 'Bob'}
  
  }
  f2(obj4)
  console.log()//注意这里也是Tom

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

  理解1  只有值传递, 没有引用传递, 传递的都是变量的值, 只是这个值可能是基本数据, 也可能是地址(引用)数据

  理解2  可能是值传递,也可能是引用传递(地址值)(如果后一种看成是引用传递, 那就值传递和引用传递都可以有)

 

 

4、js内存管理

4.1 内存生命周期

分配需要的内存----使用分配到的内存(存储数据,可以反复操作)----不需要时将其释放/归还

 

4.2释放内存

(局部变量)为执行函数分配的栈空间内存: 函数执行完自动释放

(对象)存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存