es6 let&const
说明
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
一、 var 声明
- 声明提前(变量提升)
- 可以重复声明
- 可在全局或函数作用域下声明
console.log(value);
var value = 1;
function fun1() {
var value = 10;
}
二、 let 声明
- 不可以声明提前
- 不可以重复声明(同一作用域下)
- 有块级作用域
for(let i;;){}
,在 for 的小括号声明,也属于块级作用域中
1. 不可以声明提前
console.log(a); //ReferenceError: a is not defined
let a = "apple";
console.log(b); //undefined
var b = "banana";
2. 不可以重复声明(同一作用域下)
let a = 1;
let a = 2;
var b = 3;
var b = 4;
a; // Identifier 'a' has already been declared
b; // 4
3. 有块级作用域
//代码块 for(){} while(){}
{
let i = 3; //在这个代码块中定义
}
// console.log(i); // 报错 i未定义
for(let i;;){}
,在 for 的小括号声明,也属于块级作用域中
4. for (var k = 0; k < 5; k++) {
setTimeout(() => {
console.log(k);
}, 100);
}
//输出结果 5,5,5,5,5
for (let k = 0; k < 5; k++) {
//k在块级作用域中
setTimeout(() => {
console.log("let", k);
}, 100);
}
//输出结果 0,1,2,3,4
for (var j = 0; j < 5; j++) {
//es5, 使用闭包保存变量,从而隔绝绝对全局变量的访问
(function(j) {
setTimeout(() => {
console.log("es5", j);
}, 100);
})(j);
}
三、 const 声明
- 不可声明提前
- 不可重复定义
- 不可重复赋值
- 必须声明同时赋值
- 和 let 一样有块级作用域
?> 实战: 有变量名避免冲突可以使用let和const, 如果是某些不需要改变只提供方法的对象,可以使用const声明
const MAX = {
value: 100
};
console.log(MAX);
MAX.value = 200;
{
const MIN = 0;
console.log("const", MIN);
}
console.log("const", MIN); //报错,未定义