我在chrome开发人员控制台中编写了一些随机代码。令我惊讶的是,chrome让我用它let作为变量名,因为let保留关键字完全不对。我需要了解为什么会这样。
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中尝试时,会抛出错误。
node
我认为这与Google v8有关
Mohsen Azimi的这篇文章可以很好地说明其背后的原因。这是它的快速摘要。
以下关键字在JavaScript规范中定义为FutureReservedWord:
FutureReservedWord
implements interface let package private protected public static yield
在普通模式下,它们可以用作变量名而不会出现错误;但是,在严格模式下,它们被视为保留字,并且将引发以下错误:
SyntaxError: Cannot use the reserved word 'let' as a variable name in strict mode.
这样一来,ES2015之前的代码就不会中断-如果有人let在旧版应用程序中命名了许多变量,那么如果JS规范突然中断了所有操作,他们可能会不满意。