摘自 js高级程序设计 第四版 25页;
区别1: var 声明提升
使用 var 时,下面的代码不会报错。这是因为使用这个关键字声明的变量会自动提升到函数作用域顶部:
function foo() {
console.log(age);
var age = 26;
}
foo(); // undefined
之所以不会报错,是因为 ECMAScript 运行时把它看成等价于如下代码:
function foo() {
var age;
console.log(age);
age = 26;
}
foo(); // undefined
这就是所谓的“提升”(hoist),而let不会提升
区别2:作用域不同
let 声明的范围是块作用域,而 var 声明的作用域不太相同,简单来说,var的作用域在函数内,不包括if,for等代码块。
if (true) {
var name = 'Matt';
console.log(name); // Matt
}
console.log(name); // Matt
if (true) {
let age = 26;
console.log(age); // 26
}
console.log(age); // ReferenceError: age 没有定义
var既是在代码块内部声明也是类似java的全局变量,let是局部变量。
区别3:let不可重复声明
let 不允许同一个块作用域中出现重复声明。这样会导致报错:
var name;
var name;
let age;
let age; // SyntaxError;标识符 age 已经声明过了