1、const命令作用是声明一个不会变的常量

注意:一但声明,不可再改变这个值,而且在声明时就需要初始化好值。

  1. <script>
  2. const a = 'a';
  3. const b; //error Missing initializer in const declaration
  4. {
  5. const c = 'c';
  6. }
  7. console.log(a); //a
  8. console.log(b);
  9. console.log(c); //error c is not defined
  10. </script>

2、var、let、const的区别

  1. var关键字
    1. var作用域是函数级
    2. var存在变量提升,即可以先使用再定义
  2. let关键字:
    1. let作用域是代码块(花括号级的作用)
    2. let不存在变量提升,即要先定义再使用
    3. let不可以重复声明
  3. const关键字

    1. const作用域是代码块(花括号级的作用),和let一样
    2. const不存在变量提升,即要先定义再使用,和let一样
    3. const不可以重复声明,和let一样
    4. const定义时就要初始好值
    5. const定义好之后不可以再修改

      2、关于const“可变”

      上面说了,const是定义常量不可变,但在很多情况下我们发现const却是“可变”的,如下代码:

      1. <script>
      2. const arrays = [1,2,3,4,5,6,7];
      3. arrays.push(8);
      4. console.log(arrays);
      5. const set = new Set();
      6. arrays.forEach(item=>{
      7. set.add(item);
      8. });
      9. for(let item of set){
      10. console.log(item);
      11. }
      12. console.log(set);
      13. const user = {
      14. name:'name',
      15. age:18
      16. }
      17. user.age = 80;
      18. console.log(user);
      19. </script>

      这是为什么呢?实际上这是因为const保证的不是变量的值不变,而是变量指向的那个内存地址所保存的数据不能改变。对于基本数据类型,值就保存在变量指向的那个内存地址,所以用const定义的基本数据类型的值是不能改变了,而对于数组和对象,它们属于引用数据类型,变量保存的只是一个指向实际数据的指针,而这个指针指向的内存地址才是真正保存数据的值的地方,所以const只能保证这个指针不能变,但不能保证他所指向的这个内存地址里面的值不能变。
      ps:概括一下,基本数据类型,变量直接就保存了内存地址;引用数据类型,变量保存一个指针,指针指向内存地址。