前言
这段时间备战面试一直在零零碎碎整理一些东西,小编这边准备就前端基础部分系统的完整的复习整理一遍。先从js开始,今天整理一下执行上下文。
切入正题
何为执行上下文
概念
通俗意义上来讲执行上下文就是我们js代码所运行的环境。
执行上下文类型
-
全局执行上下文
很明显根据语义,在全局的代码就是在全局执行上下文中,一个程序只能有一个全局执行上下文。他会去做两件事情:
- 创建全局的
windows
对象 - 设置
this
值等于该对象
- 创建全局的
-
函数执行上下文
函数被调用时会创建属于自己的执行上下文,可有多个
-
Eval 函数执行上下文
这个用到比较少,记起来再去介绍他
执行栈
就是一个存储执行上下文的一个后进先出的队列,辅助全局上下文控制代码执行顺序。 举个简单栗子理一下执行栈。
function ask() {
console.log('what is your name?');
age();
console.log('what is your hobby?');
}
function age() {
console.log('how old are you?')
}
ask();
console.log('ending')
ask
调用创建执行上下文插入到执行栈中执行函数,ask
里面碰到age
函数执行创建函数执行上下文插入到执行栈中执行age
执行完毕自己的执行上下文弹出在去执行ask
就是这样的一个执行过程。
执行上下文怎样产生
我们上面所描述的非常简单,情境也是在已知执行上下文被被创建的情况下,那么到了重点怎样创建一个执行上下文,并运行他。
创建
执行上下文创建分三个阶段
-
this绑定
这我们是很熟悉的,全局
this
指向windows
,函数执行上下文this指向取决于他是怎样调用的(这个很基础就写案例了) -
词法环境
简单来说就是执行上下文关联环境,在词法环境的内部有两个组件:
-
环境记录器(存储变量以及函数声明)
-
一个外部环境的引用(表示作用域链)。
那么很明显全局环境是没有后者的。在全局环境中,环境记录器是对象环境记录器, 在函数环境中,环境记录器是声明式环境记录器。
-
-
变量环境
就是我们变量的作用域。
执行阶段
我们前面已经把代码的所有都铺垫好了,那么执行就好咯。(小编觉得这一步还是写上去因为毕竟是真的有这个阶段哈哈哈)。
总结
既然是系统的复习那么就尽量不遗漏点嘛,简短但还是整理为好,今天有点太晚了,下篇作用域链和闭包一起再次整理一下