跳到主要内容

变量、作用域和内存问题

动态属性

引用类型可以添加、删除属性和方法,但基本类型的此类操作没有任何意义:

var person = new Object()
person.name = "Nicholas"
alert(person.name) // "Nicholas"

var name = "Nicholas"
name.age = 27
alert(name.age) // undefined

instanceof 操作符

instanceof 会判断一个引用类型的值的类型:

alert(person instanceof Object)     // true

所有引用对象的值都是 Object 的实例。

而对基本类型使用 instanceof 会始终返回 false

环境

环境有全局环境和局部环境。

每一个函数都有一个执行环境,环境与环境之间可以相互包含。

块级作用域

JS 中没有块级作用域,一般的条件语句所包含的代码块都不是一个局部环境。

使用 var 声明的变量会自动添加到最近的环境中,而直接定义的变量会添加到全局环境中。

访问局部变量会比访问全局变量快一点。

解除引用

对于局部环境,垃圾收集器会在函数执行完毕后销毁局部环境中的变量。而在全局环境中,需要手动对引用变量赋值为 null 来释放无用的对象。