【JavaScript】执行上下文

    科技2022-08-05  102

    【执行上下文栈】

    执行上下文栈存储代码执行阶段的所有上下文,具有LIFO先进后出特性

    【ES3标准】

    【GO/AO编译过程】

    1. 先查看是否存在语法错误

    2. 预编译

    3. 解释一行执行一行

    【预编译过程 -- 执行上下文创建阶段】

    1. 创建GO/AO对象

    2. 将形参与变量声明存放到GO/AO对象中,值为undefined

    3. 将实参与形参统一

    4. 将函数声明存放到GO/AO对象中

    console.log(a); function a() { // 函数声明 } var a = 1; // 变量声明 // 结果会输出函数声明

    【ES5标准】

    【执行上下文创建阶段】

    1. 确定this指向

    2. 创建词法环境组件

    3. 创建变量环境组件

    【创建词法环境组件】

     => 环境记录: 存储变量与函数声明的实际位置(函数上下文包含arguments对象)

    PS:ES6中环境记录存储的变量只存储let与const声明的变量,而且赋值为uninitialized,未初始化

    => 对外部环境引入记录:保存自身环境可以访问的其他外部环境(全局上下文为null,函数上下文为全局环境)

    【创建变量环境组件】

    包含词法环境组件所有属性,包含环境记录与外部环境引入记录,但是在ES6中环境记录只记录var声明的变量,而且赋值为undefined

    【参考文章】

    https://www.cnblogs.com/echolun/p/11438363.html 作者讲解的十分清楚

    Processed: 0.008, SQL: 8