备战-执行上下文

256 阅读3分钟

前言

这段时间备战面试一直在零零碎碎整理一些东西,小编这边准备就前端基础部分系统的完整的复习整理一遍。先从js开始,今天整理一下执行上下文。

切入正题

何为执行上下文

概念

通俗意义上来讲执行上下文就是我们js代码所运行的环境。

执行上下文类型

  • 全局执行上下文

    很明显根据语义,在全局的代码就是在全局执行上下文中,一个程序只能有一个全局执行上下文。他会去做两件事情:

    1. 创建全局的windows对象
    2. 设置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指向取决于他是怎样调用的(这个很基础就写案例了)

  • 词法环境

    简单来说就是执行上下文关联环境,在词法环境的内部有两个组件:

    1. 环境记录器(存储变量以及函数声明)

    2. 一个外部环境的引用(表示作用域链)。

    那么很明显全局环境是没有后者的。在全局环境中,环境记录器是对象环境记录器, 在函数环境中,环境记录器是声明式环境记录器。

  • 变量环境

    就是我们变量的作用域。

执行阶段

我们前面已经把代码的所有都铺垫好了,那么执行就好咯。(小编觉得这一步还是写上去因为毕竟是真的有这个阶段哈哈哈)。

总结

既然是系统的复习那么就尽量不遗漏点嘛,简短但还是整理为好,今天有点太晚了,下篇作用域链和闭包一起再次整理一下