JavaScript中执行上下文

本文详细介绍了JavaScript中的执行上下文,包括全局、函数和Eval执行上下文,并阐述了执行上下文的生命周期,包括创建阶段(this绑定、词法环境和变量环境的创建)、执行阶段和回收阶段。此外,还解析了词法环境与变量环境的区别,并介绍了执行栈的工作原理。
摘要由CSDN通过智能技术生成

文章导图:
在这里插入图片描述

一.执行上下文

执行上下文的类型分为三种:

  • 全局执行上下文:只有一个,浏览器中的全局对象就是 window对象,this 指向这个全局对象
  • 函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文
  • Eval 函数执行上下文: 指的是运行在 eval 函数中的代码,很少用而且不建议使用

二.生命周期

执行上下文的生命周期包括三个阶段:

  • 创建阶段
  • 执行阶段
  • 回收阶段

2.1 创建阶段

在创建阶段做了三件事:

  • this的绑定
  • LexicalEnvironment(词法环境) 组件被创建
  • VariableEnvironment(变量环境) 组件被创建

伪代码如下:

ExecutionContext = {
     
  ThisBinding = <this value>,     // 绑定this 
  LexicalEnvironment = {
    ... },   // 词法环境
  VariableEnvironment = {
    ... },  // 变量环境
}

2.1.1 this 的绑定

  • 全局执行上下文中,this指向window对象(全局对象)
  • 函数执行上下文中,取决函数如何调用.如果它被一个引用对象调用,那么 this 会被设置成那个对象,否则 this 的值被设置为全局对象或者 undefined

2.1.2 词法环境

词法环境是一种有标识符——变量映射的数据结构,标识符是指变量/函数名,变量是对实际对象或原始数据的引用。

词法环境的内部由两部分组成:

  • 环境记录器: 用来储存变量个函数声明的实际位置
  • 外部环境的引用:可以访问父级作用域

伪代码如下:

GlobalExectionContext = {
     // 全局执行上下文
  LexicalEnvironment: {
          // 词法环境
    EnvironmentRecord: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值