var 与 let 有什么区别?

62 阅读1分钟

1、var 有预处理机制,也就是常说的声明提前。举个例子:

console.log(a);
var a = 10;
​
// undefined

不管变量在那个位置声明,所有变量声明都会提升至函数顶部,上面的代码等价于:

var a;
console.log(1);
a = 10;

let 不会声明提前, 控制台不会打印 undefined 而是会报错。

console.log(a);
let a = 10;
​
// Uncaught RefereceError: cannot access 'a' before

2、var 是ES5规范,只有函数作用域和全局作用域, let 是 ES6 新增的规范,用来声明块级作用域变量的。

{
    var a = 10;
}
console.log(1);  //10
​
{
    let b = 10;
}
console.log(b);  //Uncaught RefereceError: b is not defined

所以要求必须 等let声明语句执行完之后,变量才能使用。

3、let 不能重复声明,var 可以。

let a = 10;
let a = 'shenjiu';
// Uncaught SyntaxError: Identifier 'a' has already been declared
​
var b = 10;
var b = 'shenjiu';
// b: shenjiu

ES6的 let 让js拥有了块级作用域,也是向着更安全更规范的路走,虽然加了很多约束,但是都是为了让我们更安全的使用和写代码。