【ES6面试题】深入探讨`var`、`let`和`const`关键字的特性-代码示例:

时间:2024-07-10 07:20:01
console.log(x); // 输出 undefined,因为 x 被提升到了作用域顶部
var x = 5;
console.log(x); // 输出 5
var x = 10;
console.log(x); // 输出 10

let 关键字的特性

let关键字在ES6中引入,它具有以下特性:

  • 块级作用域let声明的变量仅在声明它们的块(例如,if语句、for循环等)内可见。
  • 不会发生变量提升let声明的变量不会被提升到作用域的顶部。尝试在声明之前访问let变量会导致ReferenceError
  • 不能重复声明:在同一个作用域内,不能多次使用let声明同一个变量。尝试这样做会导致SyntaxError

代码示例:

if (true) {
  let x = 5;
  console.log(x); // 输出 5
}
console.log(x); // ReferenceError: x is not defined

const 关键字的特性

const关键字同样在ES6中引入,它用于声明一个块级作用域的常量,这意味着一旦声明,其值就不能被重新赋值。

  • 块级作用域:与let相同,const声明的变量仅在声明它们的块内可见。
  • 不会发生变量提升:与let相同,const声明的变量不会被提升到作用域的顶部。
  • 不能重复声明:与let相同,不能在同一个作用域内多次声明同一个变量。
  • 必须在声明时初始化const声明的变量必须在声明时立即初始化,否则会导致语法错误。

代码示例:

const x = 5;
console.log(x); // 输出 5
x = 10; // TypeError: Assignment to constant variable.

结论

varletconst关键字在JavaScript中用于声明变量,但它们在作用域、提升行为和可变性方面存在显著差异。var关键字由于其作用域和提升行为的不确定性,以及可以重复声明的特性,可能导致代码难以理解和维护。因此,在现代JavaScript开发中,推荐使用letconst关键字,以实现更精确的作用域控制和更好的代码可读性。const关键字特别适合用于声明那些不应该被修改的值,如配置常量或API端点。