执行上下文(JS基础)

对执行上下文的理解

在执行JS之前,需要先解析代码,解析的时候会先创建一个全局执行上下文,将所有的函数声明和变量声明提升,变量声明赋值undefined,函数声明可以使用。解析完成后即可执行程序。

在执行某个函数之前,会先创建一个函数执行上下文,基本与全局上下文一致,但不同的点是 this 指向、arguments 和函数的参数

  1. 类型

    1. 全局执行上下文

      • 函数内部以外的代码都位于全局上下文中

      • 创建一个全局对象,window对象

      • this 指针指向全局对象

    2. 函数执行上下文:函数被调用时,创建函数执行上下文

      • 每个函数都有自己的执行上下文

      • 一个程序中可以有任意数量的全局上下文

      • 每个执行上下文被创建时,都会按照特定的顺序执行一些操作

    3. eval执行上下文:运行在eval函数中的代码获得自己的执行上下文

  2. 执行上下文栈:

    JavaScript引擎使用执行上下文栈管理执行上下文

    当 JavaScript 执行代码时,首先会遇到全局代码,创建一个全局上下文并压入执行上下文栈中,每当一个函数调用,就会创建一个函数执行上下文并压入栈顶。JavaScript 引擎会执行位于栈顶的上下文,当执行完毕后,从栈顶弹出,继续执行下一个上下文,最后执行全局执行上下文。

  3. 生命周期:

    创建—执行—回收

    1. 创建:当函数被调用,但还未执行时,会做以下操作

      • 创建变量对象:初始化函数的参数arguments,提升函数声明和变量声明
      • 创建作用域链
      • 确定 this 指向
    2. 执行

      变量赋值,执行代码

    3. 回收

      执行上下文出栈,等待回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值