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的值了,这点要搞清楚,
其实这个和 变量的基本类型,引用类型是一样的

猜你喜欢

转载自www.cnblogs.com/0955xf/p/12634672.html