《JavaScript高级编程设计》之变量、作用域和内存的问题

声明:以下是阅读《JavaScript高级编程设计》一书做的笔记与理解,对于我已经理解或者记住的,在下面只会简略的略过,可能有很多疏漏的地方,只适合我自己学习、记忆。对于各位而言不推荐细读。

总结

js的变量可以用来保存为基本类型和引用类型。

  1. 基本类型包括Number、String、Null、Boolean和Undefined。
  2. 基本类型值在内存中有固定大小,所以,被保存在速度快的栈中。
  3. 引用类型的变量,其实并不包含对象本身,而是一个指向该对象的指针。
  4. 从一个变量复制到另一个变量,其实复制的值是该变量的指针,它们都是指向同一个对象。
  5. 确认基本类型是哪种类型用 typeof ,确认引用类型是哪种类型使用 instanceof 操作符。

所有变量(包括基本类型和引用类型)都存在一个执行环境(作用域)中,这个作用域决定变量生命周期,以及哪部分代码可以访问变量。以下是作用域的一些特点。

  1. 执行环境有全局环境和函数环境(局部环境)之分。
  2. 每次进入一个新环境,js都会创建一个用于搜索变量和函数的作用域链。
  3. 局部环境不但能访问局部变量,还能其父级作用域的变量,乃至全局变量。
  4. 全局环境只能访问全局变量和全局函数。
  5. 变量的执行环境有助于确定应该何时释放内存。

JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收问题。对JavaScript的垃圾收集例程作如下总结。

  1. “标记清除”是现在普遍使用的内存回收方法,其机制是当变量离开执行环境后,将会被标记离开,然后,等待自动垃圾回收机制清除。
  2. 另一种方法是“引用计数”,其原理是跟踪记录变量的引用次数,JavaScript目前已经不用这种算法。其问题所在,在于js引用非原生JavaScript对象(例:DOM元素),会导致出现问题。
  3. 但代码循环引用,“引用计数”会出现问题。
  4. 为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值