let
- let声明不会被提升
- 同一作用域中的相同变量不能被let声明
let count = 21;
let count = 21;
//相同作用域中相同变量不能被let修饰两次
var count = 21;
let count = 21;
//相同作用域中相同变量不能被let重声明
var count = 21;
var a = 2;
if(a>3){
let count = 21;
}
//可以,不同作用域
const
- const修饰常量,在修饰时必须进行初始化
- const声明不会被提升
- 同一作用于内const不能修饰已经存在的标识符
- const初始化的常量不能再次被赋值
const NUM = 21;
NUM = 55;
//语法错误
- const声明对象,不可以更改绑定的对象,但是可以修改对象的属性
const person = {
name:'G',
age:21
}
person.age = 55//可以修改
person = {
name:'G',
age:55
}//报错
循环中的var,let以及const
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i)
},0)
}//输出结果为:55555
for(let i=0;i<5;i++){
setTimeout(function(){
console.log(i)
},0)
}//输出结果为:01234
for(const i=0;i<5;i++){
setTimeout(function(){
console.log(i)
},0)
}//执行一次后报错,const定义的值不能++
let每次循环创建一个新的变量,并以之前迭代的值初始化。
let的执行结果是标准中专门定义的,与let的不提升变量无关
- const可以使用for…in…或for…of…
var person = {
name:'WANG',
age:'21',
tel:'13333333333'
}
for(const key in person){
setTimeout(function(){
console.log(key)
},0)
}//执行结果:name age tel