美文网首页JavaScript知识总结
var、let、const有什么区别?

var、let、const有什么区别?

作者: 尤格萨隆 | 来源:发表于2019-07-29 15:28 被阅读0次

    首先,ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。

    1. var定义的变量,可以修改,如果不初始化会输出undefined,不会报错。没有块的概念,可以跨块访问, 不能跨函数访问。
      注意:var 声明的变量存在提升。
      提升是指无论 var 出现在一个作用域的哪个位置,这个声明都属于当前的整个作用域,在其中到处都可以访问到。注意只有变量声明才会提升,对变量赋值并不会提升。如下例所示:
    console.log(a);  //  输出undefined
    var a = 1;
    

    该代码段跟下列代码段是一样的逻辑:

    var a;
    console.log(a);  //  输出undefined
    a = 1;
    

    而如果对未声明过的变量进行操作,就会报错

    console.log(b);  /// 假设b未声明过,Uncaught ReferenceError: b is not defined
    
    1. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。在同一个块级作用域,不能重复声明变量。
    2. const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
    <script type="text/ecmascript-6">
    //块作用域
    {
      console.log(a); //  输出undefined
      var a = 1;
      console.log(b);  //  报错  Uncaught ReferenceError: b is not defined
      let b = 2;
      //  let b = 3;  报错  Uncaught SyntaxError: Identifier 'b' has already been declared
      const c = 3;
      // c = 4;  报错  Uncaught TypeError: Assignment to constant variable.
      var aa;
      let bb;
      // const cc;   报错  Missing initializer in const declaration.
      console.log(a);  //  输出1
      console.log(b);  //  输出2
      console.log(c);  //  输出3
      console.log(aa);  //  输出undefined
      console.log(bb);  //  输出undefined
    }
    console.log(a);  //  输出1
    //  console.log(b);  报错  Uncaught ReferenceError: b is not defined.
    //  console.log(c);  报错  Uncaught ReferenceError: c is not defined.
    
    //  函数作用域
    (function A() {
      var d = 5;
      let e = 6;
      const f = 7;
      console.log(d);  //  输出5
      console.log(e);  //  输出6
      console.log(f);  //  输出7
    })();
    //  console.log(d);  报错  Uncaught ReferenceError: d is not defined
    //  console.log(e);  报错  Uncaught ReferenceError: e is not defined
    //  console.log(f);  报错  Uncaught ReferenceError: f is not defined
    </script>
    

    相关文章

      网友评论

        本文标题:var、let、const有什么区别?

        本文链接:https://www.haomeiwen.com/subject/isybrctx.html