var let 可以,但 let let 不行吗?

Isa*_*aac 3 javascript

//Version A:
var let = true;
console.log(let);//true
Run Code Online (Sandbox Code Playgroud)
//Version B:
let let = 0; //syntax Error: let is disallowed as a lexically bound name
console.log(let);
Run Code Online (Sandbox Code Playgroud)

是否有任何特殊原因允许我们允许let使用var但不创建名称的变量let?通过这个实验,这是否也意味着变量名let可以存在于全局级别,但不能存在于某些范围级别?但全局不是考虑范围吗?

Cer*_*nce 6

正如您所猜测的,这是由于向后兼容性。const 一直是保留字FutureReservedWord在 ES5 规范中称为 a)。const自从 JavaScript 诞生以来,你就无法命名变量。

let也被认为是 a FutureReservedWord,但仅限于严格模式- 但严格模式仅在 ES5 中引入,当时 ES6 还很遥远。

'use strict';
let = 10; // errors
Run Code Online (Sandbox Code Playgroud)

var一直存在,所以命名变量var一直是被禁止的。

变量从来都不能被命名const,但是let. 如果它在(非严格的)ES5 或 ES6 中被禁止,它将破坏向后兼容性,而 Web 标准力求不惜一切代价不破坏向后兼容性。

如果,在 JS 刚诞生的时候,人们有先见之明地想:“也许,将来我们会想要使用这些词constlet声明变量,所以我们暂时将它们设为保留关键字。” 那么你就不会看到不一致的地方,因为两者从一开始就被保留了。

有许多类似的关键字有时在现代 JS 中具有特殊含义,但用作变量名时不会引发错误。

static = 5;
async = 10;
await = 15;
yield = 20;
console.log('finished without errors');
Run Code Online (Sandbox Code Playgroud)