1. let
1.1 没有变量声明提升(会报错)
1.2 不可重复定义
1.3 不用挂载到window,避免了重名问题
var a = 10;
console.log(window.a);
结果:
let a = 10;
console.log(window.a);
结果:
1.4 作用域
var a = 10;
{
console.log(a);
}
用let会形成临时死区,是会报错的
let a = 10;
{
console.log(a);
let a = 20;
}
只要有 {} 就会形成作用域 如:if(){}, function(){}, while(){},等都算
而var不会
var a = 10;
{
console.log(a);
var a = 20;
}
1.5 解决闭包问题
- es6写法
var a = []
for (let i = 0; i < 10; i++) {
a[i] = function() {
console.log(i);
}
}
a[1]();
a[4]();
- es5写法
var a = [];
var _loop = function _loop(i) {
a[i] = function () {
console.log(i);
};
};
for (var i = 0; i < 10; i++) {
_loop(i);
}
a[1]();
a[4]();
2. const
2.1 不能改变值(即使是改成相同的)
const pi = 3.14;
pi = 3.14;
2.2 利用对象可以改变const引用的值
const pi = {};
pi.age = 20;
console.log(pi.age);
pi.age = 30;
console.log(pi.age);