作用域的分类,块级作用域
块作用域、词法作用域(函数作用域)、动态作用域
解析:
1 块作用域 花括号 {}
2 词法作用域(js 属于词法作用域) 作用域只跟在何处被创建有关系,跟在何处被调用没有关系
3 动态作用域 作用域只跟在何处被调用有关系,跟在何处被创建没有关系
1.块级作用域
JS 中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称 ES6)中新增了块级作用域。块作用域由 { } 包括,if 语句和 for 语句里面的{ }也属于块作用域。
2.变量提升
补充
补充:作用域(scope)指变量与函数的可访问范围。JS 中常见分类:
- 全局作用域 :全局声明的变量/函数,可在任何位置访问;
- 函数作用域 :函数内部声明的变量,仅在该函数及其嵌套中可见;
- 块级作用域(ES6) :
let/const在{}包裹的代码块(if / for / while 等)中声明,外部不可访问;- 词法作用域(静态作用域) :作用域在代码书写阶段就确定(JS 采用);
- 动态作用域 :作用域在调用时根据调用栈确定(JS 不采用,但
this的行为类似动态作用域)。变量提升(hoisting) :JS 引擎在执行前会把
var声明与function声明"提升"到当前作用域顶部, 其中var只提升声明不提升赋值, 所以var变量在声明前使用值为undefined; 而let/const存在暂时性死区(TDZ),声明前使用会报错。
console.log(a) // undefined(var 提升)
var a = 1
console.log(b) // ReferenceError(TDZ)
let b = 2
来源整理自:vue3js.cn 面试官系列



