我正在玩Nodev0.10.12中的let。使用--harmony标志,下列代码将产生语法错误:
for (let i = 0; i < 2; i += 1) {
console.log('i', i);
}SyntaxError:在扩展模式之外的非法让声明
但是,如果我也使用--use-strict标志,那么代码将按预期运行。
为什么仅使用--harmony标志时会引发语法错误?什么是扩展模式?什么是与严格模式的联系?
发布于 2013-06-22 19:03:33
2012年2月27日,“扩展模式”(Extended)似乎从和声规范的当前开发版本中删除了,但其中有一段描述了一些较老的模式(这是从2012年1月16日开始的):
10.1.2扩展代码 扩展代码是包含在ECMAScript程序语法单元中的任何代码,这些代码包含在ECMAScript规范第五版之后定义的词法或句法产品的出现。在下列情况下,代码被解释为扩展代码:
术语“严格代码”用于指定实际的严格模式代码和扩展代码,而“扩展代码”一词仅指实际的扩展代码。术语“基本代码”用于指定未扩展代码的代码。
至于与严格模式的连接,这似乎是特定于V8的(实验)实现。10062修订版的变更量g引入了--harmony标志,其内容如下:
这个CL引入了第三种模式,在非严格模式(此后称为“经典模式”)和“严格模式”旁边,称为“扩展模式”,就像在当前的ES.next规范草案中一样。扩展模式基于“严格模式”,并为其添加了新功能。这意味着这两种模式的大部分语义是一致的。 当使用“严格模式”指令“使用严格”和和谐范围范围标志处于活动状态时,将在解析过程中输入“extended”,而不是“严格模式”。一旦完全指定了“扩展模式”的输入方式,就应该更改。。
发布于 2013-06-22 18:28:01
如何在你的node.js中获得和谐
--harmony标志启用ES和谐特征。--harmony似乎在语言中启用了新的v8特性,基于v8,当使用此标志时,代理、弱映射、集、映射、类型语义和块作用域都是可用的,这些都是扩展的特性,在扩展这些特性之后,您可以使用let (用于块作用域),而strict mode只是基于这些特性才启用,否则会抛出
SyntaxError:在扩展模式之外的非法让声明。
扩展模式:当您使用新的ECMA特性(ECMAScript 5)时,您处于语言的扩展模式,在这种模式下,ECMAScript的新特性(扩展代码)和语法只能在严格模式中使用
“扩展代码”的概念,这意味着代码可以使用新的Es.next语法。
和声:
“和谐”是JavaScript的主要升级项目,将于2013年底推出。2008年,在经历了许多争议之后,负责创建下一代JavaScript的ECMA技术委员会第39届会议同意就JavaScript的“和谐”更新进行合作,自那时以来,该委员会一直在开发中。一些拟议的特性的和谐是支持谷歌的实施。这包括块作用域绑定和添加let关键字、有效映射和集合以消除“将对象作为字典使用”、垃圾回收键/值表的弱映射以及可以模拟任何JavaScript对象或函数以启用自定义的代理。
一些不错的读物是这里和听见。也来自铬博客。
也来自保罗·爱尔兰:
弗朗索瓦·博福特 (最初共享):在最后一个Chromium的chrome://标志页中出现了一个名为Enable实验性JavaScript的新标志。此标志使网页能够使用实验性的JavaScript功能。
要在Chrome中使用扩展的模式/和谐特性,我们必须启用它,我们可以通过导航到chrome://flags来启用它,并且可以在“试验性JavaScript特性”上切换(启用/禁用)。
https://stackoverflow.com/questions/17253509
复制相似问题