一、执行上下文是什么
在JavaScript中,有三种代码分类:
1.全局代码(全局中书写的代码)
2.局部代码(常见函数体里的代码)
3.Eval代码(使用eval()执行的代码)
在这种情况下,JS就引入了一个执行上下文(Execution context),用于区分不同环境下的代码。在执行不同环境的代码时,会生成不同的执行上下文对象,并这些执行上下文对象存入一个由JS引擎创建的执行上下文栈(Execution context stack)。
二、执行上下文的分类
基于上述,执行上下文分为以下三种:
1.全局执行上下文
在执行全局代码前,就将window确定为全局执行上下文,加入执行上下文栈中,并对全局数据进行如下预处理:
(1)var定义的全局变量,赋值为undefined(变量的声明提前),并添加为window的属性。
(2)function声明的全局函数,赋值为其函数体代码(函数的声明提前),并添加为window的方法。
(3)将window赋值给this。
然后才开始执行全局代码。
2