目录
对于我们前端开发者来说理解JS程序内部执行机制是必要的,其中一个关键概念就是Js的执行上下文和执行栈。
执行上下文是JS语言较为底层的知识,学习掌握有助于我们更深入的把握JS这门语言的本质,也有助于理解作用域、闭包、变量提升等相关知识。
代码执行前,浏览器的Js引擎先会创建代码执行的环境来处理此Js代码的转换和执行,代码的执行环境称为执行上下文。
执行上下文是一个抽象概念,包含当前正在运行的代码以及当前执行环境中的变量、函数声明,参数(arguments),作用域链,this等信息。
一句话概括:执行上下文就是javascript代码被解析和执行时所在环境的抽象概念。
(1)创建阶段
生成变量对象、建立作用域链、确定this的指向
(2)执行阶段
变量赋值、函数的引用、执行其他代码

变量对象是与执行上下文相关的数据作用域,存储了上下文中定义的变量和函数声明 变量对象是一个抽象的概念,在全局执行上下文中,变量对象就是全局对象。 在顶层js代码中,this指向全局对象,全局变量会作为该对象的属性来被查询。在浏览器中,window就是全局对象
在js中,执行上下文分为以下三种:
对于每个执行上下文,都有三个重要属性:变量对象、作用域链(Scope chain)、this

是一种先进后出的数据结构,用来存储代码运行的所有执行上下文

- var a = 1; // 1. 全局上下文环境
-
- function bar (x) {
-
- console.log('bar')
-
- var b = 2;
-
- fn(x + b); // 3. fn上下文环境
-
- }
-
- function fn (c) {
-
- console.log(c);
-
- }
-
- bar(3); // 2. bar上下文环境