# 执行上下文环境 #
**定义**:执行函数的时候,会产生一个上下文的对象,里面保存变量,函数声明和this。
**作用**:用来保存本次运行时所需要的数据
在产生执行上下文(执行上下文环境)时,浏览器会做以下三个准备工作:
1.提取var 声明的变量,并赋值为 undefined
2.提取声明式函数。
3.给this赋值,指向window或当前对象。
函数每执行一次都会产生一个执行上下文,
因为函数参数不同会有不同的计算结果,
## 全局上下文环境 ##
全局级别的代码,如多个script标签,一旦执行就会进入全局执行上下文环境
1.提取普通变量,如 var a ,并赋值 a = undefined
2.提取声明式函数,function fn(){}
3.给 this 赋值,this指向window
## 局部上下文环境 ##
在函数调用的时候产生,每一次调用就会产生,调用完成后销毁(除闭包)。
1.提取普通变量,如 var a ,并赋值 a = undefined
2.提取声明式函数,function fn(){}
3.给 this 赋值,this指向当前对象
4.给参数赋值
5.给arguments 赋值
6.自由变量的取值作用域,查找并赋值
自由变量:在当前作用域中未声明的变量,会去其上一级查找,直到window
arguments:是一个实参副本,与实参保持一致。
## 执行上下文栈 ##
**压栈 和 出栈**
压栈:函数未调用时只有全局上下文在执行,每次调用函数时会产生局部上下文,这就是压栈,也就是进栈。
出栈:函数调用完成后,就会出栈,会销毁本次调用的局部上下文环境
注意:若函数里面是多层函数嵌套,也会出现多层执行上下文的嵌套
压栈和出栈也是嵌套产生的
时间: 2024-11-03 03:31:36