函数的作用域和执行上下文

文章深入探讨了JavaScript中的执行上下文的生命周期,包括创建和执行阶段,以及变量对象和作用域链的概念。作用域决定了变量和函数的访问范围,分为全局、函数和块级作用域。动态作用域链按照变量定义的位置决定访问顺序,而内存管理则涉及了内存分配和垃圾回收机制。
摘要由CSDN通过智能技术生成

函数的作用域和执行上下文

执行上下文
  • 执行上下文
    • 当前代码的运行环境
    • 作用:保存当前代码运行时所需要的数据
    • 在全局环境、函数环境中会创建执行上下文
    • 函数执行时创建;当一个函数调用时,一个新的执行上下文就会被创建
  • 执行上下文栈
    • 按照函数的调用顺序来管理执行上下文
    • 栈底永远是全局上下文,栈顶是当前正在执行的函数
    • 特点:先进后出
  • 生命周期
    • 执行上下文的生命周期
      • 创建(解析)阶段:–作用域链确定 创建变量对象(声明提升规则)
      • 执行阶段:修改变量对象
      • 等待回收阶段
  • 每个执行上下文都有一个与之关联的变量对象(VO)和一个作用域链(scopechain)
  • return语句
    • 返回值
    • 终止函数执行(销毁当前执行上下文,弹出执行上下文栈 )
变量对象
  • 定义
    • 与执行上下文相关的数据作用域
    • 与上下文关联的特殊对象,用于存储被定义在上下文中的变量和函数声明
  • 创建过程
    • 建立 arguments 对象
    • 检查当前上下文的函数声明
    • 检查当前上下文中的变量声明
  • 浏览器中全局上下文的变量对象
    • 变量对象就是 window 对象
    • 在页面关闭前一直存在
作用域链
  • 作用域

    • 作用域是一套关于如何存储变量当中的值,并且能在之后对这个值进行访问和修改的规则
  • 作用域的作用

    • 指定变量与函数的可访问范围
    • 控制着变量与函数的可见性
  • 作用域类型

    • 全局作用域
      • 在全局作用域下声明的变量叫做全局变量
      • 全局作用域中无法访问到局部作用域中的变量
      • 全局变量创建方式
        • 在全局作用域下 var 声明的变量
        • 在函数内部,没有使用 var关键字声明直接赋值的变量
        • 使用 window 全局对象创建的属性和方法
    • 函数作用域
      • 在函数作用域下声明的变量叫做局部变量
      • 局部变量只在当前函数内部中使用
      • 局部作用域中可以访问到全局作用域中的变量
      • 局部变量创建方式
        • 在函数内部通过 var 声明的变量
        • 函数的形参
    • 块作用域
      • { } 中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,称为块级作用域
      • ES5 没有块作用域,在 ES6 中添加了块作用域
  • 作用域模型

    • 词法作用域(静态性) —— JavaScript 作用域
      • 由函数定义的书写位置决定的,与调用位置无关
      • 静态性,静态结构决定了一个变量的作用域
    • 动态作用域(动态性) —— 仅由调用位置决定
  • [[scope]]属性

    • 虚拟属性,无法问问和修改
    • 函数创建(定义)时生成的属性,保存着这个函数所有父级执行上下文环境中的变量对象的集合
  • 作用域链(scopechain)

    • 由当前执行环境与所有父级执行环境的一系列变量对象组成

      • ScopeChain = VO + [[scope]]
        
    • 提供对变量和函数访问的权限和顺序的规则

  • 变量函数访问规则

    • 沿着作用域链从里向外查找
    • 查找会在找到第一个匹配的标识符时停止
内存空间管理
  • 内存空间管理
    • 分配内存
    • 使用分配到的内存
    • 不需要时释放内存
  • 垃圾回收机制
    • 当一个值失去引用之后就会回收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值