Pra*_*avi 4 javascript google-chrome v8 node.js ecmascript-6
我在chrome开发者控制台中编写了一些随机代码.令我惊讶的是,chrome让我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
Run Code Online (Sandbox Code Playgroud)
这个缺陷存在于node.但是,当我在Babel REPL中尝试它时,它会抛出一个错误.
我认为这与Google v8有关
出于兼容性原因,仅在严格模式下禁止使用保留的ES6关键字.
Babel(通过严格模式插件)默认使用严格模式.在浏览器或节点中,您可以通过添加"use strict";文件的开头或函数来隐式设置严格模式.
运行以下代码段会在Chrome中引发错误:
"use strict";
var let = 43;
// Throws: Uncaught SyntaxError: Unexpected strict mode reserved wordRun Code Online (Sandbox Code Playgroud)
Mohsen Azimi在本文中可以找到关于这背后推理的一篇很好的文章.以下是它的快速摘要.
以下关键字在JavaScript规范中定义为FutureReservedWord:
implements interface let package private
protected public static yield
Run Code Online (Sandbox Code Playgroud)
在正常模式下,这些可以用作变量名而没有错误; 但是,在严格模式下,它们被视为保留字,并将抛出以下错误:
SyntaxError: Cannot use the reserved word 'let' as a variable name in strict mode.
Run Code Online (Sandbox Code Playgroud)
这样ES215之前的代码就不会破坏 - 如果有人let在遗留应用程序中命名了很多变量,如果JS规范突然破坏了所有内容,他们可能会感到不高兴.
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |