JS全局变量

2022-08-25 14:14:18 浏览数 (1)

❝你从互联网上学东西、掌握新的技能,或者互联网帮助你实现自我,那么互联网就是你的工具;如果你只是在互联网上玩乐,花了自己的时间和金钱,却只得到了精神的满足,那你是互联网的工具。在免费的江湖里,你就是产品 --《向上生长》 ❞

简明扼要

  1. 作用域是「静态」
  2. 作用域通过「词法环境」实现的
  3. 词法环境 = 环境记录 OuterEnv
  4. 变量的作用域链由词法环境中OuterEnv串联
  5. 在浏览器环境下,globalThis不直接指向全局对象
  6. WindowProxy是一个将所有访问转发到当前窗口的对象
  7. 全局环境记录使用对象环境记录声明环境记录来管理变量
  8. 通过const,letclass创建的变量被绑定到声明环境记录中
  9. 通过var和函数声明的变量被绑定到对象环境记录中
  10. 声明环境变量中变量优先访问
  11. 使用ECMAScript和宿主环境的内置全局变量初始化全局对象

文章概要

  1. Scope(作用域)
  2. Lexical Environments (词法环境)
  3. 全局对象(global object)
  4. 浏览器环境下的globalThis
  5. 全局环境(global envrionment)
  • Script 作用域 和Module 作用域
  • 生成变量: 声明环境记录 vs 对象环境记录
  • 访问变量
  • 全局ECMAScript变量和全局宿主变量
  1. 一图胜前言

1. Scope(作用域)

我们平时常说的变量的作用域(scope),它全名应该叫「词法作用域」(lexical scope)。它是程序中可以访问变量的区域,即作用域控制着变量和函数的可见性和生命周期。

我们在前期的文章中,描述了,V8执行JS代码核心流程 1. 先编译 2. 后执行。在这个编译的过程就是「静态」的。所以我们可以这么说,作用域是「不随代码的运行而改变」的变量查找机制。

❝JS的作用域是静态的 ❞

同时,作用域还可以被嵌套。

代码语言:javascript复制
function func() { // (A)
  const v1 = 1;
  if (true) { // (B)
    const v2 = 2;
  }
}

如上所示: 在B行的if语句内嵌在A行的func()函数作用域。

我们把内部作用域外面的作用域称为:outer 作用域。例如:func作用域就是if作用域的 outer 作用域。

2. Lexical Environments (词法环境)

在ecma262(自备

0 人点赞