异步编程部分
- 任务
- 同步任务(js主线程)
- 异步任务(任务队列(
Event Loop)- 微任务(
Promise) - 宏任务(
setTimeOut)
- 微任务(
执行顺序: 同步任务 微任务 宏任务
所谓的高大上名词解析
执行上下文(相当于做一顿饭时准备各种必需品(锅,火,调料))
- 种类
- 全局执行上下文
- 函数执行上下文
- Eval函数执行上下文
- 生命周期
- 创建过程:1.生成变量对象,2.建立作用域链,3.确定this的指向。
- 执行过程:1.变量赋值,2.函数引用,3.执行其他代码。
- 销毁阶段:执行完毕后出栈,,等待被回收。
- 执行上下文的创建
-
创建阶段-执行上下文
确定this的指向,this确定或设置的值
在全局执行上下文中,this的值指向全局对象,在浏览器中,this的值➡window对象;在nodejs中指向的是➡module对象
在函数执行上下文中,this的值取决于函数的调用方式(即如何被调用的)。当它被一个引用对象调用,则将的值this设置为该对象,否则this的值将的值this设置为全局对象或undefined(在严格模式下)
-
执行阶段-执行上下文
在此阶段,将完成对所有这些变量的分配,最后执行代码。
VariableEnvironment(变量环境)组件已创建
在ES6中,词法组件和变量环境组件之间的区别是前者用于存储函数声明和变量(let和const)绑定,而后者仅用于存储变量var绑定。
说说变量提升的原因,在创建阶段,函数声明存储在环境中,而变量会被设置为undefined或保持未初始化。
so,这就是为什么可以在声明之前访问var定义的变量,但如果在声明之前访问let和const定义的变量就会提升引用错误的原因。
-
执行栈(存储东西的内存(我的16g)执行)
其实执行堆栈(调用堆栈)具有后进先出结构的堆栈,该结构用于存储在代码执行执行期间创建的所有执行上下文。