第四章 变量、作用域和内存问题
- ecmascript变量包含两种不同数据类型:基本类型和引用类型(对象)
- 五种基本类型:Undefined Null Boolean Number String
- 基本类型是按值访问的,引用类型是按引用访问的
- 引用类型复制时,复制的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象,复制前后两个变量最终都指向同一个对象
- ECMAScript中所有函数的参数是按值传递的,在向参数传递引用类型值时,会把这个值在内存中的地址复制给一个局部变量,因此局部变量的变化会反映在函数的外部
- 传参时对象按值传递,传递的是内存地址
- 所有引用类型都是Object的实例
- 如果用instanceof检测基本类型的值,则该操作符始终返回false,因为基本类型不是对象
- 全局执行环境是最外围的一个执行环境
- 每个函数都有自己的执行环境
- 作用域链 -- 内部函数可以访问外部变量,外部不能访问内部变量
- 函数参数也被当做变量来对待,因此其访问规则和执行环境中的其他变量相同
- 有些语句可以在作用域链的前端临时增加一个变量对象
- try-catch语句的catch块
- 如果局部环境中存在着同名标识符,就不会使用位于父环境中的标识符
- 垃圾收集机制:
- 标记清除 (主流的垃圾收集算法)
- 引用计数
- 一旦数据不再有用,最好将其值设置为null来释放引用,这种做法叫解除引用,适用于大多数全局变量和全局对象的属性
- 基本类型值在内存中占据固定大小的空间,保存在栈内存中
- 引用类型的值是对象,保存在堆内存中
网友评论