标签:
每当调用一个函数时,一个新的执行上下文就会被创建出来。然而,在javascript引擎内部,这个上下文的创建过程具体分为两个阶段:
1.建立阶段(发生在当调用一个函数时,但是在执行函数体内的具体代码以前)
建立变量,函数,arguments对象,参数
建立作用域链
确定this的值
具体过程如下:
1.找到当前上下文中的调用函数的代码
2.在执行被调用的函数体中的代码以前,开始创建执行上下文
3.进入第一个阶段-建立阶段:
建立variableObject对象:
建立arguments对象,检查当前上下文中的参数,建立该对象下的属性以及属性值
检查当前上下文中的函数声明:
1.每找到一个函数声明,就在variableObject下面用函数名建立一个属性,属性值就是指向该函数在内存中的地址的一个引用
2.如果上述函数名已经存在于variableObject下,那么对应的属性值会被新的引用所覆盖。
3.检查当前上下文中的变量声明:
每找到一个变量的声明,就在variableObject下,用变量名建立一个属性,属性值为undefined。如果该变量名已经存在于variableObject属性中,直接跳过(防止指向函数的属性的值被变量属性覆盖为undefined),原属性值不会被修改。
初始化作用域链 确定上下文中this的指向对象
2.代码执行阶段:
变量赋值,函数引用,执行其它代码
标签:
原文地址:http://www.cnblogs.com/zhouxuesong/p/4948144.html