兄台: 作用域、执行上下文了解一下

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

  1. 作用域控制着变量和函数的可见性和生命周期
  2. JS的作用域(scope)是「静态」的(static)
  3. ES6块级作用域和函数作用域属于同一大类(声明式作用域)
  4. ES6块级作用域是函数作用域的子集
  5. with会扩展作用域链
  6. 在全局作用域下,声明式(块级)ER优先级高
  7. 块级作用域中的(let/const)变量查找路径 1. 词法环境 2. 变量环境 3. OuterEnv对象
  8. 作用域链 是由环境记录(ER)的内部属性 OuterEnv串联起来的
  9. 作用域只是执行上下文有权访问的一组「有限」的变量/对象
  10. 同一个执行上下文上可能存在多个作用域
  11. 每个执行上下文都有「自己」的作用域
  12. 使用 setTimeout 来解决栈溢出:setTimeout 会将包装函数「封装成一个新的宏任务」,并将其添加到消息队列中

文章概要

  • 作用域(Scopes)
    • 词法环境(Lexical environments)
    • 作用域链
  • 执行上下文
  • 调用栈

作用域(Scopes)

变量的词法作用域(简称:作用域)是程序中可以访问变量的区域。通俗地理解,作用域就是变量与函数的可访问范围,即作用域控制着变量和函数的可见性和生命周期。

JS的作用域是「静态」的(不会在运行时被改变)

作用域可以被嵌套。

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

if语句引入的作用域(B行)嵌套在函数func()的作用域内(A行)。

词法环境(Lexical environments)

在ecma262(自备

0 人点赞