任何一段Javascript代码都对应一个作用域链,作用域链中存放一系列对象,代码中申明的变量将作为对象的属性而存放。
在javascript的顶层代码中,作用域链由一个全局对象组成,当定义一个函数时,它保存一个作用域链,作用域链上有两个对象,一个是函数对象,一个是全局对象。
每当一个函数被调用时,会创建一个活动对象(也叫上下文对象),函数中的局部变量,将作为该对象的属性存放。
当需要使用一个变量时,将从作用域链中逐个查找对象的属性。比如:要使用变量a,将先查找作用域链中的第一个对象是否有属性a ,如果有就是使用,如果没有就继续查找作用域链中下一个对象的属性,以此类推。
如果作用域链上没有任何一个对象有属性x,则认为这段代码的作用域链上不存在属性x,将刨除引用错误异常。
当函数调用我完成后,如果没有其他引用指向为这次调用所创建的上下文活动对象,该对象将被收回。