- 作用域控制着变量和函数的可见性和生命周期
- JS的作用域(scope)是「静态」的(static)
- ES6块级作用域和函数作用域属于同一大类(声明式作用域)
- ES6块级作用域是函数作用域的子集
with
会扩展作用域链- 在全局作用域下,声明式(块级)ER优先级高
- 块级作用域中的(let/const)变量查找路径 1. 词法环境 2. 变量环境 3. OuterEnv对象
- 作用域链 是由环境记录(ER)的内部属性
OuterEnv
串联起来的 - 作用域只是执行上下文有权访问的一组「有限」的变量/对象
- 同一个执行上下文上可能存在多个作用域
- 每个执行上下文都有「自己」的作用域
- 使用 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(自备