JS的两种变量类型
JS变量可以用来保存两种类型的值:基本类型值和引用类型值。两者具有以下特点:
- 前者包括基本的数据类型,后者包括对象。
- 前者是按值复制,而后者是按地址引用。
- 确定一个值是哪种基本类型可以使用typeof操作符,而确定一个值是哪种因引用类型可以使用instanceof操作符。
变量作用域
在JS中,只有两种作用域。并且不存在块作用域(即大括号括起来的作用域或其他作用域)。
- 全局,属于window
- 局部,属于函数
垃圾回收
由于计算机给浏览器分配的内存空间很小,一般小于应用的分配大小。因此,变量的回收十分重要。在JS中回收机制有两种:
- 标记清除:主流的方法,在变量离开作用域时进行标记。
- 引用计数:跟踪记录所有值被引用的次数。如,内存中有一个值,对它的引用则计数加1,若引用变量不再引用(指向其他值或设置为null),则计数减一。等到计数为0时,则可以在下次垃圾回收时进行清除。
缺点:引用计数存在循环引用问题。
解决办法:
对于全局变量,在使用完毕后将变量“解除引用”,如指向null即可。对于局部变量不用进行相关操作,系统会自动解除引用。