1、let命令和var一样,作用是声明一个变量。
- var关键字
- var作用域是函数级
- var存在变量提升,即可以先使用再定义,
let关键字:
- let作用域是代码块(花括号级的作用)
- let不存在变量提升,即要先定义再使用
let不可以重复声明
<script>console.log(a); //undefinedvar a='a';var a='aa';console.log(a); //aaconsole.log(b); //error Cannot access 'b' before initializationlet b = 'b';let b = 'bb'; //error Identifier 'b' has already been declared</script>
<script>var a = 'a';let b = 'b';{var c = 'c';let d = 'd';console.log(a); //aconsole.log(b); //b}console.log(c); //cconsole.log(d); //error: d is not defined</script>
2、let应用场景
在for循环中定义变量用let就很合适,如下:
<script>for(let i=0;i<10;i++){console.log(i);}//这里依然可以用变量i,而不需要用j来防止变量冲突for(let i=0;i<10;i++){console.log(i);}</script>
3、let与var在循环中的不同
<script>var a = [];for(var i=0;i<10;i++){a[i] = ()=>{console.log(i);}}console.log(a[6]()); //输出10var b = [];for(let i=0;i<10;i++){b[i] = ()=>{console.log(i);}}console.log(b[6]()); //输出6</script>
