变量、作用域和内存问题
动态属性
引用类型可以添加、删除属性和方法,但基本类型的此类操作没有任何意义:
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
来释放无用的对象。