JavaScript高级程序设计(第3版) 第四章(变量、作用域和内存问题)

4.1 基本类型和引用类型的值

            1.基本类型的值是(简单的数据段),引用类型的值是(保存在内存中的对象)。

                基本类型的值在内存中占据固定大小的空间,因此被保存在栈中。(lifo)(后进先出的数据结构)

                引用类型的值保存在堆(先进先出的数据结构)中。引用存放在栈中。

            2.为对象添加属性时,操作的是实际对象;复制保存时操作的 是对象引用。

            3.复制变量值:①基本数据类型

var num1 = 5;
var num2 = num1;         //num1与num2是完全独立的

          ②引用类型,复制是实际上是引用。复制结束以后,2个变量引用同一个对象。

            4.当在函数内部重写 对象时,对象就变成了一个局部对象。该对象在函数执行完成以后即销毁。

        
         function setName(obj) {
            obj.name = "zds";
            obj =  new Object();  //重写
            obj.name = "hhh";
        }
        var b = new Object();
        setName(b);
        console.log(b.name);     //zds

            ECMAScript 所有函数的参数都是按值传递的。(引用类型也是按值传递。上例中,对象在增加属性,操作的就是实际对象)

           5.检测类型:①检测基本数据 ----typeof

                                 ②检测引用类型的数据 - instanceof  

4.2 执行环境及作用域

            1.①每个执行环境(每块土地)都有一个与之关联的变量对象(地主),环境中定义的变量和函数(农民和农具)都保存在这个对象中。

             ②web浏览器中,全局执行环境被认为是window对象。

             ③执行环境被销毁,保存在其中的变量和函数也随之销毁(全局环境直到应用程序退出时(例如:关闭网页或者浏览器时)才被销毁)

          2.内部环境可以通过作用域链访问所有的外部环境。

          3.执行环境分为,全局执行环境和函数执行环境。每进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链;

4.3 垃圾收集

          1.js具有自动垃圾收集机制。这种机制的原理是:找出那些不再继续使用的变量,然后释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔周期性地执行这一操作。

          2.方法:①标记清除 ②引用计数 

             “标记清除"是目前主流的垃圾收集算法,这种算法的思想是:给当前不使用的值加上标记,然后再回收其内存

             “引用计数”是跟踪记录所有值被引用的次数。目前不推荐这种。

             ③引用计数会遇到循环引用的问题:

         

var a = new Object();
var b = new Object();
a.name = b;
b.name = a;

            a和b的引用次数永远都是2。

            ④ie的js引擎(trident)是使用标记清除策略实现的。而非原生js对象是基于计数策略的。

          4.分配给web浏览器的内存数量要比分配给桌面应用程序少。是为了安全方面的考虑,目的是为了防止js的网页耗尽全部系统内存而导致系统崩溃。

             因此确保占用最少的内存可以让页面获得更好的性能。而优化内存最佳方式,就是为执行中的代码只保存必要的数据,一旦数据不再引用,最好通过将其设置为null来释放其引用。----即”解除引用“

var a = {name:“zds”};

a = null';

           解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其收回。

转载于:https://www.cnblogs.com/zdsBlog/p/6417687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值