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