使用'let'作为variables名不会在google v8中引发任何错误
我正在写一些随机代码在Chrome开发者控制台。 令我惊讶的是,铬让我使用let
作为一个完全错误的variables名,因为let
是一个保留关键字。 我需要明白为什么会发生这种情况。
场景:
var const = 78 //throws an error as expected var function = 46 //throws an error as expected var let = 56 //didn't throw an error :O let //prints 56, which is wrong because 'let' is a keyword let ab = 90 ab //prints 90 as expected
这个缺陷存在于node
。 但是,当我在Babel REPL中尝试它时,会抛出一个错误。
我认为这与Google v8有关
Mohsen Azimi在这篇文章中可以find一个很好的背后的推理。 这里有一个简要的总结。
以下关键字在JavaScript规范中定义为FutureReservedWord
:
implements interface let package private protected public static yield
在正常模式下,这些可以作为variables名而不会出错; 然而,在严格的模式下,他们被视为保留字,并会抛出以下错误:
SyntaxError: Cannot use the reserved word 'let' as a variable name in strict mode.
这是为了ES2015之前的代码不会中断 – 如果有人在遗留应用程序中命名了很多variables,那么如果JS规范突然打破了一切,他们可能不会高兴。
由于兼容性原因,禁止在严格模式下使用保留的ES6关键字。
Babel(通过严格模式插件 )默认使用严格模式。 在浏览器或Node中,您可以通过添加"use strict";
隐式设置严格模式"use strict";
在文件或函数的开始。
运行下面的代码片段会导致您在Chrome中发生错误:
"use strict"; var let = 43; // Throws: Uncaught SyntaxError: Unexpected strict mode reserved word