第四章变量,作用域和内存问题

2018-10-05  本文已影响0人  土豪码农

基本类型和引用类型的值

js里面变量包含两种不同数据类型,

上一章说到的Undefined,Null,Boolean,Number,String类型都是基本数据类型

函数的参数传递是按值传递的,也就是说,把函数外部的值复制给函数内部的参数,就像把值复制给另外一个值一样.基本类型传递和基本类型变量的复制是一样的,同理,引用类型传递和引用类型的复制也是一样的.
例如:

    var a = 1;

    function fn(a) {
        a = 5
    }

    fn(2)
    console.log(a);//1

    var obj = {};

    function fn2(a) {
        a.name = '123'
    }

    fn2(obj)

    console.log(obj); //{name: "123"}

注意:当在函数内部重写obj时,这个变量引用的就是一个局部对象了,这个局部对象会在函数执行完毕后立即被销毁
例如:

    function fn2(a) {
        a.name = '123'
        a = {name:'22'}//即使把a重新定义了,结果还是没有变化
    }
    fn2(obj)
    console.log(obj); //{name: "123"}

垃圾回收

js具有自动垃圾回收机制,简单的说就是会自动去清理不需要的垃圾,减少占用的内存.

确保占用最少内存可以让页面获得更好的性能,最好通过将其值设置为null来释放其引用——这个做法叫做解除引用(dereferencing)。这一做法是用于大多数全局变量和全局对象的属性。局部变量会在他们执行环境时自动被解除引用,不过,解除一个值的引用并不意味着自动回收该值所占用的内存.解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其收回

有几个点

上一篇 下一篇

猜你喜欢

热点阅读