javascript高级程序设计第三版 第四章 变量、作用域和内存问题

4.1.4 检测类型

检测引用类型的值是什么对象,使用instanceof

4.2 执行环境及作用域

执行环境是js中最为重要的一个概念。每个环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在该变量对象中。
web中,window对象被认为是全局执行环境。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。
每个函数有自己的执行环境,每进入一个函数,函数的执行环境就会被推入一个环境栈中。
每进入一个环境,会创建变量对象的一个作用域链。其用途是,保证对执行环境有权访问的所有变量和函数的有序访问。

4.2.1 延长作用域链

有些语句可以在作用域链前端临时增加变量对象,该变量对象会在代码执行后被移除。
1、try-catch语句的catch块
2、with语句。也许是因为会延长作用域链,导致性能下降,不推荐使用吧。

function buildUrl(){
    var qs = "?debug=true";
    with(location){ //其变量对象中就包含了location对象的所有属性和方法
        var url=href+qs; //url变量仍在buildUrl()环境的变量对象中
    }
    return url; //因此能返回,没有报错
}

4.2.2 没有块级作用域(ES6中let提供块级作用域功能)

if(true){
    var color = "blue";
}
alert(color); //blue

for(var i=0;i<10;i++){
    doSomething(i);
}
alert(i); //10

4.3 垃圾收集

js具有自动垃圾收集机制
采用标记清除算法,因为引用计算算法在循环引用中存在严重问题导致内存泄露。
全局变量不再使用的时候,需要手工解除引用,让值脱离执行环境,以便垃圾收集器下次运行将其回收。
globalPerson = null;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值