一、let
1、变量没有提前声明,没有预解释
2、不能重复定义
3、虽然不进行预解释,但是代码执行上来也是先将定义的变量提前过滤一遍,一旦发现不合法,就直接报错了,代码也不会执行。
二、块级作用域
{ }是一个私有作用域,块级作用域
let oLis=document.getElementsByTagName('li');
for(var i=0;i<oLis.length;i++){
oLis[i].onclick=function () {
console.log(i); //永远输出4
}
}
for(let i=0;i<oLis.length;i++){
oLis[i].onclick=function () {
console.log(i); //相应输出数,生成私有作用域,变量就是私有变量
}
}
let a=0;
function fn() {
console.log(a);//当前作用域没有,也是会往上查找的
}
fn();
三、const
1、定义静态变量,不能修改,必须要赋值
2、不可重复声明(不管是动态变量,还是静态变量,都不可以重复定义)