1. >>> const a = 2
2. >>> var a = 3
3. >>> a = 4
4. >>> a // print 2
为什么允许运行3号线?const 似乎比没有任何关键字更“全局”...
1. >>> const a = 2
2. >>> var a = 3
3. >>> a = 4
4. >>> a // print 2
为什么允许运行3号线?const 似乎比没有任何关键字更“全局”...
const
范围被定义为“块范围”(其范围仅限于声明它的块)。
常量是块范围的,很像使用let 语句定义的变量。常量的值不能通过重新赋值改变,也不能重新声明。
关于您的具体问题:首先正如评论所说const
的与 ES6 相关。我不了解你,但我得到(输入你的第 2 行var a = 3;
:):SyntaxError: Identifier 'a' has already been declared 所以你的例子不太可能。
这就是工作const
方式(或不工作):
创建一个常量1,该常量对于声明它的函数可以是全局的或局部的。常量遵循与变量相同的范围规则 [.. 并且不能与同一范围内的函数或变量共享名称]。
如果您重新声明2 [与重新分配不同] 常量,Firefox [..] 会引发 TypeError 。如果您为常量[..]分配另一个值,则主要浏览器都不会产生任何通知或错误2,3 ,但重新分配(仅)在 Firefox 和 Chrome 中不成功(至少从版本 20 开始)。
请注意,这不是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
并且因为 const “不能与同一范围内的函数或变量共享名称”。
3在 Chrome 21 中,const a = 2; var a = 3; a = 4; a
计算结果为 2,没有警告或消息。