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