JavaScript中var、let和const之间的区别是什么?
JavaScript有三种变量声明语句:var
、let
和const
。后两者是在ES6中添加的,而var
存在于之前的版本中。首先要注意的一点是,const
定义常量(即不会被重新赋值的值),而var
和let
定义变量。然而,var
在各种其他方面与let
和const
的行为不同。
作用域
使用var
声明的变量是函数作用域的,而使用let
或const
声明的变量是块级作用域的。
const scopeExample = () => {
var a = 'var';
let b = 'let';
console.log(a, b); // 'var', 'let'
{
var c = 'var';
let d = 'let';
console.log(c, d); // 'var', 'let'
}
console.log(c); // 'var'
console.log(d); // 抛出ReferenceError错误
};
如果你想了解更多信息,我们有一篇更深入地介绍JavaScript变量和作用域的文章。
提升
使用var
声明的变量会被提升到封闭的作用域中,而使用let
或const
声明的变量在其定义被评估之前不会被初始化。
const hoistingExample = () => {
console.log(a); // undefined
var a = 'var';
console.log(a); // 'var'
console.log(b); // ReferenceError
let b = 'let';
console.log(b); // 'let'
};
如果你想了解更多,我们有一篇更深入讲解JavaScript变量提升的文章。
全局对象属性
在顶层作用域中,使用var
声明的变量(与使用let
或const
声明的变量不同)会在全局对象上创建一个属性。
var a = 'var';
let b = 'let';
console.log(window.a); // 'var'
console.log(window.b); // undefined
重新声明
在严格模式下,使用var
声明的变量可以在同一作用域中重新声明,而对于使用let
或const
声明的变量则不允许重新声明。
'use strict';
var a = 'var1';
var a = 'var2';
```javascript
let b = 'let1';
let b = 'let2'; // SyntaxError
如果你想了解更多,我们有一篇更深入介绍JavaScript严格模式的文章。