都说想成为出色的JavaScript 开发者,就要深入学习 JavaScript 程序内部的执行机制,最近学了一遍JS的执行上下文和执行栈,以此作总结。
首先先来了解几个专业概念
-
EC:函数执行环境(或执行上下文),Execution Context
-
ECS:执行环境栈,Execution Context Stack
-
VO:变量对象,Variable Object
-
AO:活动对象,Active Object
-
scope chain:作用域链
什么是执行上下文
每次当控制器转到ECMAScript可执行代码的时候,它都是在执行上下文中运行,即是指当前执行环境中的变量、函数声明,参数,作用域链,this等信息。
组成代码示例
const ExecutionContextObj = {
VO: window, // 变量对象
ScopeChain: {
}, // 作用域链
this: window
};
执行上下文的类型
JavaScript 中有三种执行上下文类型。
-
全局执行上下文—— 这是默认上下文,浏览器中的全局对象就是window对象,任何不在函数内部的代码都在全局上下文中,this指向这个全局对象。
-
函数执行上下文 —— 当函数被调用时创建,会为该函数创建一个新的执行上下文&