• ES6中神奇的const


    这里简单的罗嗦一下 var 和 let 的区别

    执行下面的代码1:
    (function() {
        console.log(name);
        let name = 'PapaerCrane';
    })();
    
    
    执行下面的代码2:
    (function() {
        console.log(name);
        var name = 'PapaerCrane';
    })();
    
    总结:var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。
    
    为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错:Cannot access 'name' before initialization

    言归正传,我们来扯一下const,毕竟今天的猪脚就是它:

    const  a = 123;
    const  b = '456';
    const  c = true;
    
    上面这3中情况,a,b,c的值是不能改变的
    const obj = {
        a:10      
    }
    
    obj.a = 20;
    console.log(obj.a) // 20
    
    是不是觉得很奇怪,const 给人的印象就是定义一个常量,
    其实这个说法不严谨,准确的说:const 定义的变量,这个变量的值可以改动,
    但是对于基本类型的数据来说,值就保存在变量指向的内存地址,所以不能改动
    (就像上面的 那种 字符串,数字,布尔值)
    对于复合类型的数据(主要是对象和数组),他们的值是可以改变的

    再比如下面的这种情况:

    const obj = {
        a:10      
    }
    
    obj = {
        a:20
    }    
    
    console.log(obj.a) // Identifier 'obj' has already been declared
    
    这种情况报错是因为,你改变了obj的内存地址,而不是改变的 obj对象里面的a的值了,这点要搞清楚,
    其实这个和 变量的基本类型,引用类型 原理是一样的
  • 相关阅读:
    codefoces 1405 D Tree Tag
    洛谷P3413 萌数
    数位DP模板
    leetcode 统计所有可行路径
    Josephus Transform 加速置换
    牛客IOI周赛18-提高组 排列
    Find a way HDU
    Oil Deposits HDU
    Fire! UVA
    Pots POJ
  • 原文地址:https://www.cnblogs.com/0955xf/p/12634672.html
Copyright © 2020-2023  润新知