闲来无事水一章。
在 JavaScript 中,有三种声明变量的方式:var、let 和 const。它们之间的主要区别包括以下几点:
Var
使用 var 关键字声明的变量声明的变量的作用域是函数作用域或全局作用域。在函数内部声明的 var 变量在函数外部是不可见的,而在函数外部声明的 var
变量则是全局变量,可以被任何代码块访问。在同一作用域内,可以声明同名的 var
变量,而后声明的会覆盖先声明的变量。var 变量可以被重复声明和重新赋值,而且不会产生错误。代码示例如下:
function example() {
var x = 1; //定义
if (true) {
var x = 2; //重新定义
console.log(x); // 重新定义覆盖x输出 2
x=3;
console.log(x); // 重新赋值x输出3
}
console.log(x); // 输出 3
}
example();
Let
使用 let 关键字声明的变量是块级作用域的,也就是说,它的作用域是在当前代码块内部,包括 if、for 和函数内部。let 变量不能被重复声明,但是可以重新赋值。代码示例如下:
function example() {
let x = 1; //定义
//let x=2;报错,let块级作用域内可以重新赋值但不可以重新定义
x=2;
console.log(x);
if (true) {
let x = 3;
console.log(x); //x输出3
}
console.log(x); // 输出 2
}
example();
Const
使用 const 关键字声明的变量也是块级作用域的,和 let 变量一样不能被重复声明,但是不能被重新赋值。const 声明的变量必须在声明时进行初始化,而且必须赋一个确定的值。例如:
function example() {
//const x ;报错const定义必须给一个确定的初始值
//let x=2;报错,let块级作用域内可以重新赋值但不可以重新定义
const x=2;
//x=3;报错,不能重新赋值
console.log(x);
if (true) {
const x = 3;
console.log(x); //x输出3
}
console.log(x); // 输出 2
}
example();
除了上述的区别之外,还有一些其他的注意事项:
- 在 let 和 const 声明的变量的作用域内,变量的值是不可访问的,直到声明的那一行代码执行完成。
- 在使用 const 声明对象或数组时,对象和数组的内容是可以修改的,但是不能重新赋值。
- 在使用 let 和 const 声明的变量的作用域内,变量在声明之前是不可访问的会抛出
ReferenceError
:。