声明:以下是阅读《JavaScript高级编程设计》一书做的笔记与理解,对于我已经理解或者记住的,在下面只会简略的略过,可能有很多疏漏的地方,只适合我自己学习、记忆。对于各位而言不推荐细读。
总结
js的变量可以用来保存为基本类型和引用类型。
- 基本类型包括Number、String、Null、Boolean和Undefined。
- 基本类型值在内存中有固定大小,所以,被保存在速度快的栈中。
- 引用类型的变量,其实并不包含对象本身,而是一个指向该对象的指针。
- 从一个变量复制到另一个变量,其实复制的值是该变量的指针,它们都是指向同一个对象。
- 确认基本类型是哪种类型用 typeof ,确认引用类型是哪种类型使用 instanceof 操作符。
所有变量(包括基本类型和引用类型)都存在一个执行环境(作用域)中,这个作用域决定变量生命周期,以及哪部分代码可以访问变量。以下是作用域的一些特点。
- 执行环境有全局环境和函数环境(局部环境)之分。
- 每次进入一个新环境,js都会创建一个用于搜索变量和函数的作用域链。
- 局部环境不但能访问局部变量,还能其父级作用域的变量,乃至全局变量。
- 全局环境只能访问全局变量和全局函数。
- 变量的执行环境有助于确定应该何时释放内存。
JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收问题。对JavaScript的垃圾收集例程作如下总结。
- “标记清除”是现在普遍使用的内存回收方法,其机制是当变量离开执行环境后,将会被标记离开,然后,等待自动垃圾回收机制清除。
- 另一种方法是“引用计数”,其原理是跟踪记录变量的引用次数,JavaScript目前已经不用这种算法。其问题所在,在于js引用非原生JavaScript对象(例:DOM元素),会导致出现问题。
- 但代码循环引用,“引用计数”会出现问题。
- 为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。