Loading

JavaScript执行上下文

概念
  • 代码执行时产生的环境(环境里有:this、变量、函数、类)。
作用
  • 确定当前使用的xxx具体值是多少。
分类()
  • 全局执行上下文:窗口打开时产生(将代码在浏览器打开),关闭时销毁。

  • 局部执行上下文:函数调用时产生,调用结束销毁。调用多少次就会产生少个局部执行上下文。

  • eval执行上下文(可将字符串当成JS代码解析,有一些怪异现象,暂且不讨论)

对比(作用域)
  • EC:动态的,执行时才产生
  • 作用域:静态,根据代码的书写位置
执行栈
  • 特点:先进后出
  • 执行过程
    • 全局执行上下文压栈。代码按顺序执行,每调用一次函数,在栈内就会分配相应的空间给它产生的局部执行上下文,叠放在原有内容上班。谁在栈顶谁就是正在执行的函数,执行完毕退栈,移交执行权并回收内存(环境销毁)。
EC的生命周期
  • 创建阶段(做了什么)
    • 确定this的指向
    • 建立环境记录(执行时在环境记录中找需要的xxx)
    • 建立对外引用
      • 在自己的环境中没有需要使用的xxx时使用
      • 指向函数声明处所处的环境
  • 执行阶段
    • 代码按顺序执行
    • AO(Active Object:活动对象,VO激活后就成了AO)
  • 销毁阶段
环境记录
  • VO(Variable Object:变量对象)
    • 看参数
    • 看声明式函数(记录的是整个函数)——若命名冲突,覆盖
    • 看var变量(初始化值为undefined)——若命名冲突,忽略
      • 注:let和const声明的变量也在记录环境记录中,但是不初始化,而不初始化的东西是无法使用的,所以在赋值之前访问都会报错,这段区域就叫它的暂时性死区。赋值初始化之后可以正常使用。
      • 初始化:变量声明后第一次赋值。
作用域链
  • 通过执行上下文的对外引用,可以一直向外寻找链成一个链条,链条的起点是函数执行时产生的局部执行上下文,链条的末尾永远是全局执行上下文,这个链条就叫做:作用域链。
posted @ 2020-03-07 09:58  小雪同学  阅读(133)  评论(0编辑  收藏  举报