JavaScript高级程序设计(一)基础总结之变量与赋值

来源:互联网 发布:美编软件 编辑:程序博客网 时间:2024/05/18 15:28

摘要:基本类型存放在栈内存,引用类型存放在堆内存。

1. 问题1: var a = xxx, a内存中到底保存的是什么?

  * xxx是一个基本数据,a内存中保存的就是该数据;
  * xxx是一个对象,a内存中保存的是该对象的地址值;
  * xxx是一个变量,最终同上两种。

2. 关于引用变量赋值问题
  * 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见

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

    var a = {name:'vn'}    var b = a    b.name = 'ez'    console.log(a.name)  //ez
内存图

    var b = {name:'vn'}    function f(obj) {        obj.name = 'tom'    }    f(b) // 隐含的一步:obj = b    console.log(b.name)  //tom

    var c = {name:'ez',age:18}    function f2(obj) {        obj = {name:'vn',age:16} //新创建一个对象,即在堆内存中又重新创建了一个新对象    }    f2(c) // 第一步:obj = c; 第二步:obj = {name:'vn',age:16}    console.log(c.name,c.age)  //ez 18


3. 问题: 在js调用函数时传递变量参数时, 是值传递还是引用传递?
  * 只有值传递, 没有引用传递, 传递的都是变量的值, 只是这个值可能是基本数据, 也可能是地址(引用)数据

  *  如果后一种看成是引用传递, 那就值传递和引用传递都可以有


4. 问题: JS引擎如何管理内存?
  1. 内存生命周期
    1). 分配需要的内存
    2). 使用分配到的内存
    3). 不需要时将其释放/归还
  2. 释放内存
    * 为执行函数分配的栈空间内存: 函数执行完自动释放

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


原创粉丝点击