【JavaScript】执行上下文

【执行上下文栈】

执行上下文栈存储代码执行阶段的所有上下文,具有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 作者讲解的十分清楚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值