zoukankan      html  css  js  c++  java
  • es6--let和const

     参考资料

     http://es6.ruanyifeng.com/#docs/let

     测试环境(本文的代码均是在chrome下运行)

      在<script>标签中添加'use strict',即严格模式

    let

    1. 声明变量,可以更改,但不允许重复声明;
       let a = 1;
       let a = 2; //Uncaught SyntaxError: Identifier 'a' has already been declared
      
       let b = 1;
       b = 2;
       console.log(b);  //2
    2. 没有声明提升;
      console.log(a); //Uncaught ReferenceError: a is not defined
      let a  = 1;
    3. let声明的变量只在它所在的代码块内有效  (块级作用域:指一个函数或变量只在该区域起作用)
      {
              let a = 1;
              console.log(a); //1
      }
      console.log(a);// Uncaught ReferenceError: a is not defined
    4. 暂时性死区:指从块的开始到声明这段的区域,如果在变量声明之前使用该变量,会报错

     const

    1. 声明一个只读变量(不允许重复声明;值不允许修改;只声明不赋值会报错),但当声明的值是一个对象的时候,对象的属性是可以更改的。
      //一旦声明,值不能更改
      const a = 1;
      console.log(a); //1
      a = 2;
      console.log(a); //Uncaught TypeError: Assignment to constant variable.
      
      //只声明不赋值
      const b; //Uncaught SyntaxError: Missing initializer in const declaration
      
      //不能重复声明
       const b = 1;
      const b = 2; //Uncaught SyntaxError: Identifier 'b' has already been declared
      
      //值为对象时,对象的属性/属性值可以更改
      const b = {
             num : 1
      }
       b.num = 2;
       console.log(b.num);  //2
    2.  没有变量提升

      console.log(a);  //Uncaught ReferenceError: a is not defined
      const a = 1;
    3. const声明的变量只在它所在的代码块内有效
      {
              const a = 1;
              console.log(a);  //1
      }
      console.log(a); //Uncaught ReferenceError: a is not defined
    4. 与let一样,存在暂时性死区

     总结

      const和let命令都是es6在es5声明变量方法(var function)基础上添加的新方法:

      共同点:

    1. 变量一经声明,不能重复声明
    2. 所声明的变量都只在他们所处代码块区域内有效
    3. 都没有变量提升
    4. 都存在暂时性死区

      不同点:

      const声明的变量是只读变量,变量声明之后值不允许更改,原因是const声明的变量指向是一个内存地址,对于简单数据类型(number,boolean,string),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。

        

      

    博客搬家:三小山的个人博客

    如有不对,欢迎指正,谢谢
  • 相关阅读:
    soapUI学习笔记--用例字段参数化
    python 写数据到txt 文件
    Python生成8位随机字符串的一些方法
    python datetime获取几分钟、小时、天之前的时间
    MQTT 测试工具介绍
    运用MQTT-JMeter插件测试MQTT服务器性能
    mqtt-jmeter
    ActiveMQ测试工具
    MQTT压力测试工具之JMeter插件教程
    volatile非原子性的示例
  • 原文地址:https://www.cnblogs.com/sanxiaoshan/p/6846373.html
Copyright © 2011-2022 走看看