• JS的执行上下文


     

    定义

    执行上下文时是代码执行时的环境,JS代码在运行前进行编译,那么会生成两部分,一部分是可执行的代码,而另一部分则是执行上下文。

    作用

    用于跟踪代码运行的运行情况。执行步骤如下:

    • 一段代码块对应一个执行上下文,被封装成函数的代码被视作一段代码块,或者“全局作用域”也被视作一段代码块。
    • 当程序运行,进入到某段代码块时,一个新的执行上下文被创建,并被放入执行栈中。当程序运行到这段代码块结尾后,对应的执行上下文被弹出栈。
    • 当程序在某段代码块中运行到某个点需要转到了另一个代码块时(调用了另一个函数),那么当前的可执行上下文的状态会被置为挂起,然后生成一个新的可执行上下文放入执行栈的顶部。
    • 执行栈最顶部的可执行上下文被称为 running execution context。当顶部的可执行上下文被弹出后,上一个挂起的可执行上下文继续执行。

    类别

    全局执行上下文、函数执行上下文和 eval 执行上下文

    发展

    执行上下文所包含的内容是在不断的变化的。它主要分为了三个不同的阶段。分别是ES3阶段,ES5阶段和ES9阶段

    ES3阶段

    • variable object:变量对象,用于存储变量的对象。
    • scope:作用域,也常常被叫做作用域链。
    • this

    ES5阶段

    • variable environment:变量环境, 当声明变量时使用。(此环境还包含了一个外部引用,用来指向外部的执行上下文,我们把这个外部引用称为 outer(外部环境))
    • lexical environment:词法环境, 当获取变量时使用。
    • this

    ES9阶段

    正常情况

    正常情况会有如下四种

    • variable environment:变量环境,当声明变量时使用。
    • lexical environment:词法环境,当获取变量或者 this 值时使用。
    • code evaluation state:用于恢复代码执行位置。
    • Realm:使用的基础库和内置对象实例。

    ⚠️:this 值被归入 lexical environment

    特定情况

    在特定的情况下又会有如下三种

    • Function:执行的任务是函数时使用,表示正在被执行的函数。
    • ScriptOrModule:执行的任务是脚本或者模块时使用,表示正在被执行的代码。
    • Generator:仅生成器上下文有这个属性,表示当前生成器

    参考

    TC39规范:https://tc39.es/ecma262/#sec-type

    https://segmentfault.com/a/1190000009522006

    浏览器原理与实践

    重学前端

  • 相关阅读:
    css: 组合选择器
    css: 基础选择器
    javascript设计模式:工厂模式
    wx: 小程序公共机制
    vue: 脚手架创建项目
    nodejs: express sequelize-cli
    css:flex和float margin布局
    自定义标签之inclusion_tag
    Django模型之Meta选项详解
    Django内置Admin
  • 原文地址:https://www.cnblogs.com/suihang/p/13384877.html
Copyright © 2020-2023  润新知