ES6入门:3、const 命令

一、作用:

  const 声明的变量,在声明初就必须赋值好,并且一旦声明后,这个变量的值就不能改变,也就是该const 声明的就是常量;

    const test;  //  Missing initializer in const declaration. const 初识话变量时未实例化值(未赋值)
    const temp = '我是常量';
    temp = '变化后';  //  Assignment to constant variable. 报错原因为给常量赋值
    console.info(temp);

  

二、const 的作用域:

  const 的作用域 和 let 命令相同:只在声明所在的块级作用域内有效

console.info(temp);  //  temp is not defined  证明存在块级区域
    {
        console.info(temp);  //  Cannot access 'temp' before initialization  证明存在暂时性死区
        const temp = '我是常量';
        console.info(temp);  //  我是常量
    }
    console.info(temp);  //  temp is not defined  证明存在块级区域

 

三、const 的本质:

  const 实际上保证的是,并不是声明变量的值不可以改动,而是该变量指向的那个内存地址所保存的数据不得改动;

  • 对于基础类型的数据(数值,字符串,布尔值等),值就保存在变量指向的那个内存地址,因此等同于常量;
  • 对于引用类型的数据(主要是对象和数组等),变量指向的内存地址,保存的只是一个指向实际数据的指针,const 只保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了,因此,讲一个对象声明为常量时必须非常小心;
    //  基础数据类型
    let text = '2';
    const temp = text;
    console.info(temp);  //  2
    text = '3';
    console.info(temp);  //  2  说明对于基础数据类型,const在声明变量时,就已经对该变量指向保存该值的内存地址,指向不会因为中间变量的变化而变化
    console.info(text);  //  3

    //  引用数据类型
    let yy = {};
    const temp = yy;
    console.info(temp);  //  {}
    yy.a = 10;
    yy.b = 'ce';
    //  说明对于引用类型的变量,const 变量值保存指向该指向实际数据的指针,保证该指针是固定的,至于指向的数据结构是不是可变的,就不能控制了
    console.info(temp);  //  {a: 10, b: 'ce'}
    temp = {c : '赋值另一个对象'};  //  Assignment to constant variable.

 

posted on 2022-07-02 17:28  冷漠「」  阅读(146)  评论(0)    收藏  举报