JavaScript中的函数是基于词法作用域的而不是动态作用域.这句话的意思是JavaScript中的函数运行在它们被定义的作用域里而不是它们被执行的作用域里.定义一个函数时当前作用域链被保存起来并成为该函数内部状态的一部分.作用域链的顶层(最初一层)是由全局对象构成的这和词法作用域没什么明显的关联.然而当你定义一个嵌套函数时作用域链将包含外层函数(嵌套函数的外层函数.原文:the containing function).这就意味着被嵌套的函数可以访问外层函数的所有参数和局部变量.
注意:尽管在一个函数定义的时候作用域链就已经固定了但是作用域链中定义的属性并不是固定的.作用域链是"活的"(“live”)当函数被调用的时候它有权访问任何当前被关联的数据.