MST
星途 面试题库

面试题:JavaScript严格模式下变量提升与作用域的复杂问题

在严格模式下('use strict';),分析以下代码的运行结果及原因,包括变量提升、作用域的影响,以及可能出现的错误: ```javascript function checkScope() { 'use strict'; console.log(a); let a = 2; if (true) { let a = 3; console.log(a); } console.log(a); } checkScope(); ```
35.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 运行结果
    • 代码会抛出 ReferenceError
  2. 原因分析
    • 变量提升:在严格模式下,letconst 不存在变量提升到函数顶部的情况(不像 var 会有变量提升)。所以在 console.log(a); 这一行,a 还未声明,就尝试访问,导致 ReferenceError

    • 作用域

      • 函数 checkScope 内部有块级作用域(由 if 语句块形成)。
      • if 块内部声明的 let a = 3; 只在该 if 块内有效,其作用域被限制在 if 块中。
      • 函数内部外层声明的 let a = 2; 作用域是整个 checkScope 函数,但由于前面提到的没有变量提升,在声明之前访问会报错。
    • 可能出现的错误:正如上述所说,代码会抛出 ReferenceError,因为在使用 a 变量之前,它还未声明。

所以,该段代码由于在 let 声明变量之前访问变量,在严格模式下会报错,无法正常输出任何结果。