let 定义的变量不会被变量提升,并且是块级作用域,相同作用域下变量不能重复定义;
(()=>{
console.log(a); //undefined
var a = 10;
})()
//这个代码相当于 声明被提前,所以会打印undefined
(()=>{
var a;
console.log(a);
a= 10;
})()
//如果用let 声明不会被提前,所以会报错
(()=>{
console.log(a); //报错 a is not defined
let a = 10;
})()
//let 是块级作用域,有避免污染全局环境的作用
for(var a=0;a<10;a++){}
console.log(a); //10
for(let a=0;a<10;a++){}
console.log(a); //a is not defined
//注意:如果在同一块作用域内,如果有let声明,就不能在声明之前用这个变量,所以下面会报错
let a= 10;
if(true){
console.log(a); // a is not defined
let a = 20;
console.log(a);
}
let 定义变量在全局作用域中,该变量并不存在于window 对象下,而是存在于script 作用域中,不属于任何对象,可以看作和window对象同级。
let a = 10;
console.log(a); //10
console.log(window.a) //undefined
const 定义常量且不能被修改,同时也为块级作用域;
const a = 10;
a = 20; // Assignment to constant variable
解构赋值
let obj = {
a :10,
b : 20,
c : [30,40]
}
let {a,b} = obj; //a=10 b=20
let [c,d] = obj.c; //c=30 d=40