使用var
关键字声明的变量的作用范围是创建这些变量的函数。 或者如果是在任何函数之外创建的,则是全局对象。 let
和 const
是 block scoped, 意思是它们只能在最近的一组大括号内(函数, if-else 块, 或循环块)。
function foo() {
var bar = 'bar';
let baz = 'baz';
const qux = 'qux';
console.log(bar);
console.log(baz);
console.log(qux);
}
console.log(bar);
console.log(baz);
console.log(qux);
if (true) {
var bar = 'bar';
let baz = 'baz';
const qux = 'qux';
}
console.log(bar);
console.log(baz);
console.log(qux);
var
允许变量被提升,这意味着它们可以在声明之前用代码引用。 let
和 const
将不允许这样做,而是抛出一个错误。
console.log(foo);
var foo = 'foo';
console.log(baz);
let baz = 'baz';
console.log(bar);
const bar = 'bar';
用 var
重新声明变量不会产生错误,而 let
和 const
会。
var foo = 'foo';
var foo = 'bar';
console.log(foo);
let baz = 'baz';
let baz = 'qux';
let
和 const
不同于let
允许重新分配变量的值,而const
不允许。
let foo = 'foo';
foo = 'bar';
const baz = 'baz';
baz = 'qux';
备注
- 由于大多数浏览器在现如今都支持
let
和 const
,因此不再推荐使用 var
。 如果您需要针对较旧的浏览器,请使用 let
写代码,并使用像 Babel 这样的转译器将您的代码编译成旧的语法。