今天有时间又看了一下es6的语法,稍微做了一点总结,便于日后查阅:
let / const 声明变量,一下所讲的所有的特点都是相较于var来说的

var:

1:变量提升: var/function 声明的变量会被提升到它的调用之前
    console.log(aa); //undefined
    var aa;
    ==等价于==
    var aa;
    console.log(aa); //undefined
    aa = 12;
    console.log(aa); //12
    
2: 全局作用域 / 函数作用域
    函数内部可以访问全局作用域的变量,大那是全局作用域只可以访问全局变量,

let 特点:

1 . 不存在变量的提升
    console.log(bb); //报错
    let bb;

2 . 暂时性死区
    在一个块级作用域内声明的变量就会绑定在这个区域内了,在let没有声明变量之前这个变量都是不可用的
    1) : console.log(aa); // 报错
         let aa;
        
    2) : function fn(aa){
             let aa;
         }
         fn();// 报错,aa已经声明过了,这也说明了函数的参数实是在这个函数内部声明一个变量
     
   3) : function bar(x = y, y = 2) {
          return [x, y];
        }
        bar(); // 报错 在赋值x = y 的时候,y 还没有被声明.
        //function bar(x = 2, y = x) {
        //  return [x, y];
        //} 这样是可行的
        
 3 . 不允许重复声明;在同一个块作用域( "{  }" )内不可以重复声明同一个变量
     1) : let aa = 1;
          let aa;
          console.log(aa); //报错, aa已经声明
     2) : function fn(bb){
            let bb;
          }
          fn();//报错 ,bb 已经声明
          
 4 . 块级作用域
     会计作用域内部可以访问包含它的组用域内的变量,但是却不能访问包含于它的块级作用域的变量
    let tmp = "hello";
      //console.log(aa); //找不到aa
      //console.log(bb); //找不到bb
      function f() {
        console.log(tmp); //hello
        //console.log(bb); //找不到bb
        let aa = 123;
        if (true) {
          let bb = 567;
          console.log(tmp); //hello
          console.log(aa); //123
        }
      }
      f();

const 特点:
基本以let是一致的,只有一点const声明的变量是只读的,一但声明就必须初始化(赋值),边切后面也不可以在重新赋值


芹丸子
40 声望4 粉丝

所有文章都是自己的学习记录,如果对你有帮助我很荣幸,如果文章记录之处有什么不对不好的地方还请指教