1、let命令和var一样,作用是声明一个变量。

  1. var关键字
    1. var作用域是函数级
    2. var存在变量提升,即可以先使用再定义,
  2. let关键字:

    1. let作用域是代码块(花括号级的作用)
    2. let不存在变量提升,即要先定义再使用
    3. let不可以重复声明

      1. <script>
      2. console.log(a); //undefined
      3. var a='a';
      4. var a='aa';
      5. console.log(a); //aa
      6. console.log(b); //error Cannot access 'b' before initialization
      7. let b = 'b';
      8. let b = 'bb'; //error Identifier 'b' has already been declared
      9. </script>
      1. <script>
      2. var a = 'a';
      3. let b = 'b';
      4. {
      5. var c = 'c';
      6. let d = 'd';
      7. console.log(a); //a
      8. console.log(b); //b
      9. }
      10. console.log(c); //c
      11. console.log(d); //error: d is not defined
      12. </script>

      2、let应用场景

      在for循环中定义变量用let就很合适,如下:

      1. <script>
      2. for(let i=0;i<10;i++){
      3. console.log(i);
      4. }
      5. //这里依然可以用变量i,而不需要用j来防止变量冲突
      6. for(let i=0;i<10;i++){
      7. console.log(i);
      8. }
      9. </script>

      3、let与var在循环中的不同

      1. <script>
      2. var a = [];
      3. for(var i=0;i<10;i++){
      4. a[i] = ()=>{
      5. console.log(i);
      6. }
      7. }
      8. console.log(a[6]()); //输出10
      9. var b = [];
      10. for(let i=0;i<10;i++){
      11. b[i] = ()=>{
      12. console.log(i);
      13. }
      14. }
      15. console.log(b[6]()); //输出6
      16. </script>