基本类型和引用类型的值
引用类型可以为其添加动态的属性和方法。
检测类型 instanceof
- 在检测引用类型的值时,typeOf用处不大
- 如果想知道它是什么类型的对象: instanceof
- 基本类型不是对象
- 所有引用类型的值都是Object的实例
- 对正则表达式应用typeof的时候,不同的浏览器返回的不一样,chrome 7 返回function,IE和firefox返回object
执行环境和作用域
- 每个执行环境都有与之相关的—>变量对象(variable object)。环境中定义的所有变量和函数都保存在这个对象中。
- 全局执行环境—->web中window对象
- 每个函数都有自己的执行环境—>当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。
- 当代码在一个环境中执行时,会创建变量对象的一个作用链(scope chain)
- 作用域链的作用:保证对执行环境有权访问的所有变量和函数的有序访问。
- 作用域链的前端:当前执行环境的代码所在环境的变量对象。下一个变量对象:来自包含环境,而在下一个来自下一个包含环境…一直延续到全局环境。
- 标示符解析是沿着作用域链一级一级搜索标示符的过程。
- 内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。
延长作用域链
1.try-catch语句的catch块
2.with语句
没有块级作用域
垃圾收集
找出那些不在继续使用的变量,然后释放其占用的内存。
垃圾回收器会按照固定的时间间隔周期地执行这一操作。
标记无用变量的策略
标记清楚 (mark-and-sweep)
当进入环境时,标记为“进入环境”
当离开环境时,标记为“离开环境”
引用计数(refernce counting)
跟踪记录每个值被引用的次数
问题:循环引用
性能问题
触发垃圾收集的变量分配、字面量和数组元素的临界值被调整为动态修改。
内存管理
确保占用最少的内存可以让页面获得更好的性能
优化内存的最佳方式:为执行中的代码只保存必要的数据。一旦数据不再有用,最好通过将其值设置为null来释放期引用,解除引用(dereferencing)
解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。
总结
- 基本数据类型在内存中占据固定大小的空间,因此被保存在栈内存中
- 引用类型的值是对象,保存在堆内存中
- 从一个变量想另一个变量复制引用类型的值,会创建这个值的一个副本
- 从一个变量想另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终指向同一个对象。
- 包含引用类型的值的变量实际上并不是对象本身,而是一个指向对象的指针。