执行上下文 : EC execution context
功能:代码执行之前的准备工作,确定当前环境下变量的取值
变量提升
var声明的变量(除函数内),值提升变量的声明
函数提升
字面量声明的函数,提升整个函数体
作用域和执行上下文的区别
-
作用域是静态的 写多少就只有多少数量
-
执行上下文是动态的 数量不确定,数量取决与调用多少次
什么是作用域链
有得话就用自己的,没有就找声明地方的上面有没有
当前作用域下有就改自己,没有就找上面有没有,有的话就改上面,没有就自己声明
执行上下文的生命周期
1、创建 (变量和函数的提升)
2、执行 : 函数体的代码(改变当前变量和全局变量的值)
- 执行栈 First in last out : 存放执行上下文(最底下是GO,最上面是正在调用的函数)
- 注 : FILO、进栈(压栈),出栈 也可以说 ( 先进后出 )
3、销毁
执行上下文分类
全局上下文 GO
-
打开一个新的窗口就会创建一个全局上下文(关闭即销毁)
-
全局执行上下文步骤
创建全局对象window 简称:GO(Gbject Object)
找var声明的变量 函数
赋值un
-
局部上下文 AO:
-
调用函数时就会创建一个局部上下文(函数执行完,销毁)
-
局部执行上下文步骤 AO
创建局部对象 简称:AO(Active Object)
预编译
找形参 变量
形参 变量 赋值un
形参和实参相统一
函数提升
-
确定this的指向(由调用者确定)
-
确定作用域 (词法环境 在哪里声明,就确定在哪里的作用域)
-
初始化作用域链
执行函数体代码
-
-
evel上下文
- 能解析字符串中的js代码