美文网首页
第4章:变量、作用域和内存问题

第4章:变量、作用域和内存问题

作者: 夏至v | 来源:发表于2018-01-11 10:52 被阅读0次

    一、基本类型和引用类型的值

    1.定义

    • 基本类型值:数据段,如:undefined、null、boolean、number、string
    • 引用类型值:由多个值构成的对象,按引用访问

    2.动态的属性
    引用类型的值可以添加、修改、删除属性和方法,而基本类型值不行

    3.复制变量值

    • 复制基本类型值会在变量对象上创建一个新值,然后把该值防复制到为新变量分配的位置上(相互独立,互不影响)
    • 复制引用类型值时,新值的副本实际上是一个指针,而指针指向存储堆中的原对象
    var obj1 = new Object();
    var obj2 = obj1;
    obj1.name = "Nicholas";
    alert(obj2.name);   //"Nicholas"
    

    4.传递参数
    按值传递。基本类型值的传递和基本类型变量的复制一样,引用类型值的传递和引用类型变量的复制一样(可以把ECMAScript函数的参数想象成局部变量)

    function addTen(num){
        num += 10;
        return num;
    }
    var count = 20;
    var result = addTen(count);
    alert(count);  //20,没有变化
    alert(result);  //30
    
    function setName(obj){
        obj.name = "Nicholas";
    }
    var person = new Object();
    setName(person);
    alert(person.name);  //"Nicholas"
    

    5.检测类型
    基本类型值用typeof操作符,引用类型值用instanceof操作符

    var s = "Nicholas";
    var o = new Object();
    alert(typeof s);  //string
    alert(typeof o);  //object
    
    alert(person instanceof Object);  //true
    

    二、执行环境及作用域
    1.定义
    什么是执行环境:执行环境定义了变量或函数有权访问的其他数据。环境中定义的所有变量和函数都保存在这个环境的变量对象中。

    执行环境的销毁:所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,改环境被销毁,保存在其中的所有变量和函数定义也随之销毁(关闭网页全局环境销毁)

    执行环境的机制和详解:
    每个函数都有自己的执行环境。当执行流进入一个函数时,函数的执行环境就会被推入一个环境栈中。而在函数执行完毕,栈将其环境弹出,把控制权返回给之前的执行环境。

    当代码在一个环境中执行时,会创建变量对象的一个作用域链,用于环境内变量和函数的有序访问。作用域链的下一个变量对象来自外部环境。
    【标识符解析按照作用域链,同名则使用第一个】

    变量的执行环境有助于提高效率和确定何时释放内存

    三、垃圾收集

    • 固定时间间隔时,找出那些不再继续使用的变量,然后释放其占用的内存。
    • 离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除
    • 用null解除引用

    相关文章

      网友评论

          本文标题:第4章:变量、作用域和内存问题

          本文链接:https://www.haomeiwen.com/subject/glweixtx.html