执行上下文
只要js代码运行,那么他一定是运行在执行上下文中。执行上下文是一个抽象的概念
分为全局执行上下文和函数执行上下文还有eval函数执行上下文
函数执行上下文只有在调用函数的时候才会产生
执行上下文分为两个阶段
1、创建阶段
2、执行阶段
创建阶段
在创建阶段中
首先创建变量对象
【
1、确定函数得到形参(并赋值)
2、函数环境会初始化创建arguments对象(并赋值)
3、确定普通字面量形式的函数声明(并赋值)
4、变量声明,函数表达式声明(未赋值)
在变量声明时,如果该变量名已经存在,那么就不会再声明
】
然后确定this
最后确定作用域
执行阶段
正常执行代码
通过执行上下文的概念就可以很好的理解变量提升的问题,当然普通函数也是存在变量提升的
执行栈
执行栈遵循
先进后出,后进先出的原则
最先进栈的是全局执行上下文,最后出栈的也是全局执行上下文