《JavaScript高级程序设计》(第三版)读书笔记-第四章 变量、作用域和内存问题
4.1基本类型和引用类型的值
基本类型值指简单的数据段。
引用类型值指那些可能由多个值构成的对象。
4.1.1 动态的属性
我们可以给引用类型的值添加属性和方法,也可以改变和删除其属性和方法。我们不能给基本类型的值添加属性。
4.1.2 复制变量值
基本类型的值复制的是一个副本,变量互不影响。
引用类型的值复制是一个指针,改变一个变量印象另一个变量。
4.1.3 传递参数
ECMAScript中所有的函数的参数都是按值传递的,就是把函数外部的值复制给函数内部的参数,直接就是变量值的复制。(访问变量有按值和按引用俩种方式。)
参数实际上是函数的局部变量。
4.1.4 检测类型
检测是不是基本数据类型用typeof操作符。
检测引用类型的值时用instanceof操作符。
根据规定所有引用类型的值都是Object的实例。
4.2 执行环境及作用域
执行环境定义了变量或函数有权访问的其他数据。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
全局执行环境是最外围的一个执行环境,在web游览器中全局执行环境被认为是window对象。所有全局变量和函数都是作为window对象的属性和方法创建的。
每个函数都有自己的执行环境。
当代码在一个环境执行时,就会创建变量对象的一个作用域链。作用域链中变量对象一级一级向上递进。
标识符解析式沿着作用域链一级一级地搜索标识符的过程。
4.2.1 延长作用域链
try-catch语句的catch块;
with语句。
4.2.2 没有块级作用域
1.声明变量
使用var声明的变量会自动被添加到最接近的环境中。
2.查询标识符
为读取和写入而引入一个标识符,一级一级搜索,找到停止,后面的不管。
4.3 垃圾收集
具有自动垃圾收集机制。
4.3.1 标记清除
4.3.2 引用计数
4.3.3 性能问题
4.3.4 管理内存
一旦数据不再有用,最好通过将其值设置为null来释放其引用,这个做法叫解除引用。

浙公网安备 33010602011771号