最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • ES6(一)--- let和const

    正文概述 掘金(Yushia)   2021-03-15   606

    总结

    let

    let :在块级作用域有效,在该块级作用域之外将不能被访问。

    let :不存在变量提升(变量提升即将变量声明提升到它所在作用域的最开始的部分)。

    let :声明的变量不能重复声明,不然会报错。

    es6强制开始了严格模式,变量未声明不能使用,否则就会直接报错。

    const

    const :声明常量,在程序运行中不能直接被修改,不然会报错。

    const :声明的时候一定要赋值,不然会报错。

    const :在块级作用域有效,在该块级作用域之外将不能被访问。

    const :如果声明了一个常量为json对象类型,那么这个常量里面的对象属性可以更改和添加

    详解

    1、不存在变量提升

    var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。

    // var 的情况
    console.log(foo); // 输出undefined
    var foo = 2;
    
    // let 的情况
    console.log(bar); // 报错ReferenceError
    let bar = 2;
    

    2、暂时性死区

    只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)

    let tmp = 123;
    //代码块中的tmp将不受外部的tmp影响,形成TDZ
    if (true) {
      // TDZ开始
      tmp = 'abc'; // ReferenceError
      console.log(tmp); // ReferenceError
    
      let tmp; // TDZ结束
      console.log(tmp); // undefined
    
      tmp = 123;
      console.log(tmp); // 123
    }
    //上面代码中,在let命令声明变量tmp之前,都属于变量tmp的“死区”。
    

    3、不允许重复声明

    let不允许在相同作用域内,重复声明同一个变量。

    //不会报错(外面的a和{}里的a不在同一作用域里)
    let a = 18; 
    if(true) {
      let a = 20;
    }
    
    //会报错(在同一作用域{}内)
    if(true) {
      let a = 18;
      let a = 20;
    }
    

    4、不可改变的const命令,而且必须初始化

    const 声明一个只读的常量。一旦声明,常量的值就不会改变。这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

    const PI = 3.1415;
    console.log(PI);  //3.1415
    PI = 3.14;      //TypeError: Assignment to constant variable.
    

    注: const命令跟let命令一样不存在变量提升、具有块级作用域、存在暂时性死区、不允许重复声明。

    补充:为什么需要块级作用域?

    场景一,内层变量可能会覆盖外层变量

    var tmp = new Date();
    
    function f() {
      console.log(tmp);
      if (false) {
        var tmp = 'hello world';
      }
    }
    
    f(); // undefined
    

    上面代码的原意是,if代码块的外部使用外层的tmp变量,内部使用内层的tmp变量。但是,函数f执行后,输出结果为undefined,原因在于变量提升,导致内层的tmp变量覆盖了外层的tmp变量。

    第二种场景,用来计数的循环变量泄露为全局变量。

    var s = 'hello';
    
    for (var i = 0; i < s.length; i++) {
      console.log(s[i]);
    }
    
    console.log(i); // 5
    

    上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。


    起源地下载网 » ES6(一)--- let和const

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元