JavaScript变量分为基本值类型和引用值类型,基本值类型就是以下这五种:Boolean,Number,String,Null,Undefined。基本值类型和引用值类型具有以下特点:
1.基本值类型在内存中占用固定的大小,所以被放入栈中(String是值类型,放入栈)
2.变量复制变量基本类型的值会创建这个值的副本
3.引用类型是对象,放入堆中
4.包含引用值类型的变量不是对象本身,而是一个对象的指针
5.引用类型变量复制时复制的是指针因此两个变量指向一个对象
6.确认值是那种基本类型可以用typeof操作符,确定是哪种引用类型可以用instanceof操作符
所有的变量(基本值类型和引用值类型)都存在于一个执行环境,也就是作用域,这个环境决定了那些代码可以访问其中的变量,以下是总结:
1.执行环境分全局执行环境和函数执行环境。每次进入一个新的环境都会创建一个用于搜索变量和函数的作用域
2.函数执行环境有权访问函数作用域中的变量,而且有权访问其包含环境乃至全局环境。
3.全局环境只能访问在全局环境中定义的变量和函数而不能直接访问局部环境中的任何数据。
4.变量环境是因为帮助确定何时该释放内存
JavaScript是一门有自动垃圾收集器的编程语言,开发人员不必关心内存分配和回收问题,总结如下:
1.离开作用域的值会被标记为可回收,在垃圾收集期间将被删除
2.“标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的变量加上标记,然后再清除。
3.另一种垃圾收集算法是“引用计数”这种算法的思想是跟踪记录值被引用的次数,目前浏览器都不再使用。但是IE中访问Dom对象时会产生问题。因为IE引用了C++的Com,用的依旧是引用计数。这种算法仍然可能导致问题
4.接触变量的引用有助于消除循环引用现象,而且对垃圾收集也有好处。应该及时的清除全局对象,全局对象属性以及循环引用变量的引用。
以上是本人看书总结,如果转账请注明出处