js高级执行上下文总结

执行上下文

  1. Step1 创建全局执行上下文,并加入栈顶

  2. Step2 分析

    1. 找到所有的非函数中的var声明
    2. 找到所有的顶级函数声明(不在大括号内的函数声明)
    3. 找到顶级let,const,class声明
    4. 找到块中的声明,函数名不与上述重复
  3. Step3 名字重复

    1. let,const,class声明的名字之间不能重发
      • let声明的变量名不能重复
      • const声明的变量名不能重复
      • let和const声明的变量名不能重复
    2. let,const,class和var,function的名字不能重复
      • let和var、function声明的变量名不能重复
      • const和var、function声明的变量名不能重复
    3. var和function名字重复的,function声明的函数名优先
  4. Step4 创建绑定

    1. 找到并初始化var和undefined
    2. 顶级函数声明:找到function名字,并初始化为新创建函数对象
    3. 块级中函数声明:找到名字,初始化为undefined
    4. 找到let,const,class,但未初始化

注意:

  1. var和function是创建在全局对象中的,而let,const,class是创建在全局scope中。
  2. 函数只有函数的scope,所以var,let,class,function等,全都创建在函数的scope中。
  3. 块中的函数声明:判断函数名和顶级的var,let,class,函数名,是否一样,如果一样不做任何处理,如果不一样就在全局对象中创建一个函数,并初始化为undefined。在退出代码块的时候,先把链接连回原来的文本环境,并在全局对象中查找有没有重复的名字,如果有,就把块中的值覆盖掉全局对象中的变量值,如果没有,不做任何处理。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值