定义:变量可访问的范围;
类型分类:2类
- 静态作用域:也称词法作用域,JS属于此类;
- 变量的
作用域在代码编写时(而非运行时)就已确定,由代码的物理结构(函数/代码块嵌套关系)决定。
- 无论函数在哪里被调用,及如何被调用,其词法作用域只由函数申明是的位置决定;
- 函数内部可以访问外层作用域的变量,但外层无法访问内层作用域的变量。
- 动态作用域;
JS中作用域分类:4大类
- 全局作用域
- 函数作用域: function () => {};
- 块级作用域: {},一对花括号创建形成的作用域;
- 模块作用域: 每一个ESmodules模块都有自己的作用域;
1. 全局作用域:
在顶层的作用域,内部的变量为全局变量,可在任何作用域内访问到;
全局变量两种形式:
1.在全局作用域中用let const class 声明的变量;
未挂载到globalThis全局对象上
2.全局对象,存储在全局对象中,用var 和 function声明后创建的变量;
可用globalThis(window/global)访问到,进行增删改查
2. 函数作用域:函数内声明的变量,只能在函数内访问;
function a () {
var b = 1
}
console.log(b)
3. 块级作用域:
{
var a1 = 0
let a = 1
const b = 2
class C {}
}
console.log(a1)
console.log(a)
console.log(b)
console.log(C)
4. 模块作用域:
每一个ESmodules模块都有自己的作用域,在顶级模块中声明变量不是全局的;