let && const

作者: 枸杞辣条 | 来源:发表于2017-03-15 18:28 被阅读26次

    如需转载请注明来源

    关键词:let , const

    let

    介绍一下let的特性:

    1. let不存在变量提升:它是按照解析顺序来赋值的
    console.log(a)
    let a= 0;//报错
    
    1. 使用let会存在暂时性死区(TDZ : temporal dead zone)

    只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

    var t = 0;
      var a = 'aaa';
      {
        console.log(a)
        t++;
        let t = 99;
      }
    //先打出'aaa',之后是'ReferenceError: t is not defined',
    //报错的原因在于t++;这个语句。let 将会提升这个变量到语句块的顶部。
    //然而,在这个语句块中,在变量声明之前引用这个变量会导致一个 的结果, 因为let变量 在"暂存死区" (从块的开始到声明这段).
    
    1. let不允许重复声明:
    {
      var a=0;
      let a=1;
    //报错
    }
    
    {
      let a=0;
      let a=1;
    }
    //报错
    

    块级作用域

    记得在学作用域的时候ES5之前规定只有函数作用域和全局作用域,ES6之后规定可以有块级作用域(if,switch,for,while的大括号都是块级作用域),现在我们可以使用let或者const来触发块级作用域

    {
      let a = 0;
      const b =1;
    }
      console.log(a)
      console.log(b)
    //报错,因为let或者const触发了块级作用域,可以把大括号看成一个作用域,外部访问不到内部。
    

    基于块级作用域和let的特性我们可以放弃以前的立即执行函数的写法,换成:

    {
      let fn = function(){
          //dosomething
      }
      fn();
    }
    

    const

    const具有let以上的所有特性,在此我们主要了解const和let的不同:

    const声明一个只读的常量。一旦声明,常量的值就不能改变。这不意味着常量指向的值不可变

    const与let最大的区别是,你可以操作let的值,而const只要定义下来就不能去改变它

      const a=0;
      a++;//报错 "TypeError: Assignment to constant variable."
    

    但是,如果const存的指针指向的是一个对象的话,对象是可以改变,但是const存的指针不能改变~~~

    const a={};
    a.name='lwk';
    console.log('lwk')
    //可行,打印出lwk
    a={ name:'lwk' };
    //报错~~因为改变了指针
    

    相关文章

      网友评论

        本文标题:let && const

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