最近复习知识,在慕课看了ES6的课程。
ES6中const常量的用法不难,有趣的是,在ES5中写一个常量的方法:
解释:
1,以上代码中,PI2是变量名,value是变量值;
2,JS中,全局变量等同于window的属性(比如 var a=1; 与 window.a = 1来创建a变量并使其值为1是一样的),所以创建window的属性PI2,并设置了这个全局变量的值为3.1415926,使其不可写,只可读,于是全局变量aNumber就变成常量了。
当然,这只是利用ES5创建一个不可修改的定值。
与ES6中的常量的定义相差甚远,感觉慕课的哪个老师有点取巧;
毕竟const定义的常量,存在块级作用域,暂时性死区,没有变量提升,不可重复声明等特性;
而且,本质上,const定义的常量是保证了此变量指向的内存地址所保存的数据不变;
当数据为简单类型时(数值,字符串,布尔值),等同于常量,和上面ES5效果相同;
对于复合数据类型(对象,数组),const只是保证了指针的固定,此时数据结构还是可以改变的
(若const a=[]; a.push()和a.xx = xx;是可执行的,a = [....]会报错,即所谓,地址不变,结构可变),
除非使用object.freeze()方法。