一、let
1. 没有预解析,不存在变量提升
function fn() {
console.log(a); //Uncaught ReferenceError: Cannot access 'a' before initialization
let a = 10;
}
fn();
function fn1() {
console.log(a); //undefined
var a = 10;
}
fn1();
2. 同一个变量在同一个块级作用域可以重复赋值,但不能重复定义
let a = 1;
a = 2;
console.log(a); //2
let b = 1;
let b = 2;
console.log(b); //Uncaught SyntaxError: Identifier 'b' has already been declared
let c = 1;
{
let c = 2
console.log(c); //2
}
console.log(c); //1
3. for循环。for循环()里面相当于一个父级作用域,{}里面相当于子级作用域
for(let i=0; i<10; i++) {
let i = 'a';
console.log(i); //10个a
}
for(let i=0; i<10; i++) {
i = 'a';
console.log(i); //1个a
}
二、const
1. 特性和let一样
2. 定义的是一个常量,此常量不能修改
const a = 10;
a = 5; //Uncaught TypeError: Assignment to constant variable.
3. const定义的变量必须赋值,不能先定义再赋值
const a; //Uncaught SyntaxError: Missing initializer in const declaration