js的变量保存两种类型的数据——基本数据类型与引用类型。具有以下几点特征:
变量:
1)基本类型值在内存中占固定大小的空间,因此被保存在栈内存中;
2) 把保存基本类型值得变量赋给另一个变量,会创建这个值的副本;
3) 引用类型的值是对象,存在堆内存中;
4) 变量不会保存对象,只是创建了新的指针指向该对象,对象始终在堆内存中;
5) 指向对象的变量复制给一个新的变量,只是复制了指向对象的指针,最后两个变量都指向该对象;
6) 查看变量属于哪种基本类型得用typeof操作符,查看变量是哪种引用类型得用instanceof操作符;
作用域
1) 变量存在于执行环境中,分为全局与局部执行环境;
2) 局部环境可以访问其父环境(全局环境是最大的父环境),逐级递上,相反,父环境不能访问子环境;
内存管理:
1) js具有自动垃圾收集机制;
2) 离开作用域的值被标记为可以回收的值;
3) 标记值清除法比较流行,它是将未被使用的值标记起来,运行时回收它的内存;
4) 还有种清除法叫“引用计数”,它的意思是追踪各值引用的次数,javascript引擎已经不再使用这种方法,但在Ie中做Dom操作时,会涉及循环使用dom对象及相关值,还是会出错;
5)解除变量的引用,不仅可以消除循环引用的现象,对内存垃圾回收也有好处,所以要及时解除全局变量,全局变量的属性以及循环使用的变量;
6)解除变量引用方法:“ 变量=null;”通知垃圾回收机制来回收它的内存。