面试题答案
一键面试- 运行结果:
- 代码会抛出
ReferenceError
。
- 代码会抛出
- 原因分析:
-
变量提升:在严格模式下,
let
和const
不存在变量提升到函数顶部的情况(不像var
会有变量提升)。所以在console.log(a);
这一行,a
还未声明,就尝试访问,导致ReferenceError
。 -
作用域:
- 函数
checkScope
内部有块级作用域(由if
语句块形成)。 - 在
if
块内部声明的let a = 3;
只在该if
块内有效,其作用域被限制在if
块中。 - 函数内部外层声明的
let a = 2;
作用域是整个checkScope
函数,但由于前面提到的没有变量提升,在声明之前访问会报错。
- 函数
-
可能出现的错误:正如上述所说,代码会抛出
ReferenceError
,因为在使用a
变量之前,它还未声明。
-
所以,该段代码由于在 let
声明变量之前访问变量,在严格模式下会报错,无法正常输出任何结果。