js高级:执行上下文
Name: EC execution context
栈:用来存储基本数据类型里面是具体的值还有堆里面的地址
堆: 用来存储引用数据类型也可以用来存储基本数据类型
功能
代码执行之前的准备工作,确定当前环境下变量的取值
分类:
全局上下文 :打开一个窗口就会创建一个全局上下文(关闭即销毁)
,局部上下文:调用一个函数就会创建一个局部上下文(函数执行完,销毁)
,eval上下文(了解):会解析字符中的js代码
变量提升
:var声明的变量,只提升变量的声明
函数提升
:字面量声明的函数,提升整个函数体
执行上下文
全局执行上下文
1全局对象window GO
局部执行上下文
1创建局部对象AO Active Object
2预编译
a>形参 变量 a
b>形参 变量赋值 un a=un
c>形参和实参相统一 a=1
d>函数提升
e>确定this的指向(由调用者确定)
f>确定作用域(词法环境:在哪里声明,就确定在哪里)
g>初始化作用域链
3执行函数体
例
var i=1;
function f70(){console.log(i);
let i =0;暂时性死区,告知当前AO拥有该变量} f70();
区别
作用域:静态不变 上下文:动态 调用一次产生一个
作用域链
一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值。但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。
1创建(变量和函数的提升)
2执行(函数体的代码{改变当前变量和全局变量的值})
执行栈:存放执行上下文(最底下的是GO最上面正在调用的函数)
注FILO,进栈(压栈),出栈
3销毁