日期:2014-05-16  浏览次数:20327 次

javascript执行环境及作用域链分析

好久没研究javascript了,最近打算换换工作,所以又拿起来回忆一下:

?

直接从我博客里粘过来了希望对初学者有点用处吧,原文地址:http://www.dev26.com/blog/article/208

?

?

执行环境其实就是一个变量或者一个函数有权访问的所有其他数据集合。在每个执行环境中都有一个与之相关联的变量对象(VO),在当前环境中定义的所有变量和函数都会保存在这个变量对象中。VO我们是无法访问的,只有解析器处理数据的时候才有权在后台使用它。

全局执行环境是最外围的环境,一般是window对象,因此我们定义的所有全局变量、函数都被创建为window对象的属性和方法。当某个执行环境中的代码执行完毕,该环境将被销毁,其中的所有变量、函数也同样。

函数在被调用时会创建自己的执行环境,并推入一个栈中。当执行完毕,再弹出以返回到原来的执行环境中去。这个类似于C语言中的函数调用。

作用域链

代码在执行到一个环境中时,会创建由VO构成的作用域链。假如A的执行环境a中调用了函数B产生新的执行环境b,那么b的作用域链最前端将会保存b的VO,链的下面紧接着是它的包含作用域a的VO,如此一直到链的最后是全局执行环境的VO。

标识符的解析器是就是沿着当前环境的作用域链来搜索的。如:

1