es6 中新添加了let 和const两个关键字。
使用let声明变量的注意事项:
1、使用let声明的变量,所声明的变量只在命令行所在的代码块中有效。
2、使用let声明的变量在域解析的时候不会被提升。
例如下面代码会报错:
let f=10;
function fn(){
f=7; //暂时性死区
let f=2;
};
fn();
浏览器会报错f未定义。上面代码不大明白???
3、使用let不允许在同一作用域下声明已经存在的变量。
例如下面代码会报错:
var a=10;
let a=10;
4、在循环体之内是一个作用域,在循环体之中是一个作用域。
for(let i=0;i<3;i++){
let i=10;
console.log(i) //会3次输出10
}
console.log(i) //报错
上面这个理解的不是很清楚???
☆ let在for循环中的使用:
例如下面代码每次log出来的都是i最后的值。我们需要使用闭包或者绑定属性才能达到理想的效果。
var allBtn = document.querySelectorAll("button") for(var i=0;i<allBtn.length;i++){ allBtn[i].οnclick=fucntion(){ console.log(i); } }
使用let就没有那么麻烦:下面代码可以正常输出0、1、2
var allBtn = document.querySelectorAll("button")
for(let i=0;i<allBtn.length;i++){
allBtn[i].οnclick=fucntion(){
console.log(i);
}
}
const
const除了具备以下let所具有的前三点:
1、使用let声明的变量,所声明的变量只在命令行所在的代码块中有效。
2、使用let声明的变量在域解析的时候不会被提升。
3、使用let不允许在同一作用域下声明已经存在的变量。(不能重复声明)
const还需要额外注意:
1、声明的时候必须赋值
2、不可以被更改,基本类型的值不允许改变其值,复杂类型不能改变其引用,但是可以改变对象里面的某个属性。例如:
const a={k:555} a.k=666; //可以改值成功 a={k:777} //报错