Javascript中的const关键字范围

时间:2012-09-04 23:57:14

标签: javascript const

1. >>> const a = 2
2. >>> var a = 3
3. >>> a = 4
4. >>> a // print 2

为什么允许操作线3? const似乎比没有任何关键字更“全局”......

2 个答案:

答案 0 :(得分:10)

const范围被定义为'块范围' (其范围仅限于声明它的块)。


MDN documentation

  

常量块范围,非常类似于使用let定义的变量   声明。常数的值不能改变   重新分配,并且不能重新声明。

关于您的具体问题: 首先,评论说const与ES6相关。我不了解你,但我得到了(输入你的第2行:var a = 3;):SyntaxError:Identifier' a'已经宣布 所以你的例子不太可能。

答案 1 :(得分:9)

这是is just how const works(或不起作用):

  

创建一个常量 1 ,它可以是声明它的函数的全局或局部。 常量遵循与变量[..且不能共享名称]相同的范围规则与同一范围内的函数或变量。

     如果你重新声明 2 [不同于重新赋值]常量,那么Firefox [..]会抛出一个TypeError。 如果另一个值分配给常量 [..] ,主要浏览器都不会产生任何通知或错误 2,3 但是Firefox和Chrome中的重新分配(仅限)(至少从版本20开始)。

请注意,const 是ECMAScript 5规范的一部分,而且HTML 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,没有任何警告或消息。