JavaScript高级程序设计学习笔记——基本介绍2

JavaScript作用域

没有块级作用域
if (true) {
var color = "blue";
}
alert(color); //"blue"
变量声明

使用var声明的变量会自动添加到最近的环境中
没有用var声明的变量会被添加到全局中
如果局部环境存在同名的标识符,就不会使用位于父环境的标识符

垃圾收集

标记清除

变量进入环境,标记为“进入环境”。离开环境,标记为“离开环境”
垃圾收集器工作原理:
1. 给所有内存中的变量加上标记
2. 去掉环境中的变量以及被环境中的变量所引用的变量标记
3. 再被加上标记的变量就是准备删除的变量
4. 销毁带标记的值,回收内存空间

对于第三点:什么是再被加上标记的变量?
变量进入环境,标记为“进入环境”。离开环境,标记为“离开环境”

引用计数

跟踪记录每个值(注意是)被引用的次数
当值赋给变量时,这个值得引用次数加一
变量取了另外一个值,这个值得引用次数减一
值的引用次数变成0,释放内存

循环引用的问题

function problem(){
var objectA = new Object();
var objectB = new Object();
objectA.someOtherObject = objectB;
objectB.anotherObject = objectA;
}

当函数执行完毕后,objectA 和objectB 还
将继续存在,因为它们的引用次数永远不会是0。

解除引用

虽然JavaScript自带内存管理问题,但分配给浏览器的内存还是较少,
局部变量会在执行完后,自动清除,而全局变量却不会。
我们可以手动解除全局变量的引用,让值脱离执行环境,以便垃圾收集器下次运行时将其回收。

function createPerson(name){
var localPerson = new Object();
localPerson.name = name;
return localPerson;
}
var globalPerson = createPerson("Nicholas");
// 手工解除globalPerson 的引用
globalPerson = null;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值