在 JavaScript 中,let、const 和 var 在声明变量时有哪些主要区别?请从作用域、变量提升、重复声明和赋值限制等方面进行说明。
考察说明
考查对 JavaScript 变量声明方式的核心差异理解。
回答思路
- 【回答框架 1】var 是函数作用域,let 和 const 是块级作用域,即在一对大括号内有效。var 在函数外声明为全局作用域,而 let 和 const 在块外不可访问。
- 【回答框架 2】var 存在变量提升,声明会被提升到作用域顶部并初始化为 undefined,而 let 和 const 也会提升但处于暂时性死区,在声明前访问会报 ReferenceError。
- 【回答框架 3】var 允许重复声明同一变量,let 和 const 在同一作用域内不允许重复声明,否则会报 SyntaxError。
- 【回答框架 4】const 声明时必须初始化,且其绑定不可重新赋值,但若绑定的是对象,则对象内部的属性仍可修改;let 可重新赋值,var 也可重新赋值。
- 【回答框架 5】在全局作用域中,var 声明的变量会成为 window 对象的属性,而 let 和 const 不会。
- 【关键点 1】var 函数作用域,let/const 块级作用域
- 【关键点 2】var 有提升且初始为 undefined,let/const 有暂时性死区
- 【关键点 3】let/const 不允许重复声明,var 允许
- 【关键点 4】const 绑定不可变,但对象属性可变
- 【关键点 5】全局 var 挂到 window,let/const 不挂
- 【易错点 1】注意 const 对象属性可变,容易误解为冻结
- 【易错点 2】暂时性死区容易忽略,导致声明前使用报错
- 【易错点 3】块级作用域在循环中使用 var 会产生闭包共享问题,需要 let 或 IIFE 解决