//Version A:
var let = true;
console.log(let);//trueRun 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可以存在于全局级别,但不能存在于某些范围级别?但全局不是考虑范围吗?
正如您所猜测的,这是由于向后兼容性。const 一直是保留字(FutureReservedWord在 ES5 规范中称为 a)。const自从 JavaScript 诞生以来,你就无法命名变量。
let也被认为是 a FutureReservedWord,但仅限于严格模式- 但严格模式仅在 ES5 中引入,当时 ES6 还很遥远。
'use strict';
let = 10; // errorsRun Code Online (Sandbox Code Playgroud)
var一直存在,所以命名变量var一直是被禁止的。
变量从来都不能被命名const,但是let. 如果它在(非严格的)ES5 或 ES6 中被禁止,它将破坏向后兼容性,而 Web 标准力求不惜一切代价不破坏向后兼容性。
如果,在 JS 刚诞生的时候,人们有先见之明地想:“也许,将来我们会想要使用这些词const来let声明变量,所以我们暂时将它们设为保留关键字。” 那么你就不会看到不一致的地方,因为两者从一开始就被保留了。
有许多类似的关键字有时在现代 JS 中具有特殊含义,但用作变量名时不会引发错误。
static = 5;
async = 10;
await = 15;
yield = 20;
console.log('finished without errors');Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |