1. >>> const a = 2
2. >>> var a = 3
3. >>> a = 4
4. >>> a // print 2
Run Code Online (Sandbox Code Playgroud)
为什么允许操作线3?const似乎比没有任何关键字更"全局"......
小智 11
这是多么const的工作(或不工作):
创建一个常量1,它可以是声明它的函数的全局或局部.常量遵循与变量[..并且不能共享名称]相同的范围规则与同一范围内的函数或变量.
如果你重新声明2 [不同于重新分配]一个常量,Firefox [..]会抛出一个TypeError .如果您将另一个值分配给常量 [..],但是在Firefox和Chrome中重新分配(仅限)(至少从版本20开始),主要浏览器都不会产生任何通知或错误2,3.
注意,const是不 ECMAScript的5规范和JavaScript 1.5语义的部分将被重新定义中的ECMAScript 6.
在支持和重新声明/重新分配语义方面,浏览器实现的行为会有所不同.
1在IE 9中,使用const a = 2结果
"语法错误"
2在FF 14中const a = 2; var a = 3; a = 4; a,当作为单个程序进行评估时,会产生
TypeError:const a的重新声明
这与在REPL中一次一行地执行每一行不同.我怀疑这是因为var被悬挂上面的const因为一个常量"不能在同一个范围内的函数或变量共享名".
3在Chrome 21中,const a = 2; var a = 3; a = 4; a评估为2,没有任何警告或消息.