javascript - 为什么let=0有效但var=0无效?

标签 javascript

为什么不

let=0

显示任何语法错误,但是

var=0

有吗? (我在 Safari 上测试)

但是我尝试过

console.log(let)

但它有错误,并且似乎“let”不是一个已经定义的变量。为什么会发生这种情况?

最佳答案

因为 var 永远是关键字,但 let 却不是。因此,当将 let 添加到语言中时,TC39 委员会必须对其进行指定,以便使用 let 作为标识符的现有代码不会被破坏。 (他们的主要规则之一是“不要破坏网络”,并且他们非常认真地对待它[谢天谢地]。)

因此 let 是上下文中的关键字,例如 let 声明,但也可以是标识符:

let a = 42;                // Keyword, due to context
let = "I'm an identifier"; // Identifier, due to context 
console.log(a);
console.log(let);

注意,在严格模式下("use strict"),let不能用作标识符;引入严格模式的规范还保留了在严格模式下使用时的 let 和其他一些单词(请参阅 ECMAScript 5th edition §7.6.1.2 ),因为当然在该规范采用之前不存在严格模式代码,所以他们可以做到这一点。 (它没有保留最终成为关键字的每个单词,因此有时他们确实必须非常仔细地定义事物。例如,async 是一个完美的即使在严格模式下也是有效的标识符,但在 function 之前具有特殊含义。)

"use strict";
let = "I'm an identifier"; // SyntaxError: Unexpected strict mode reserved word
console.log(let);

关于javascript - 为什么let=0有效但var=0无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985212/

相关文章:

javascript - 如何仅在 html onload(刷新)(无点击)上从另一个 php 页面调用 php 函数

javascript - SASS child rule setting inside based on parent 下?

javascript - HTML5 必需属性在使用 CLI 安装的 Angular 2 项目中不起作用

javascript - Node mustache 渲染服务器端

javascript - jQuery 查找/最近的 li 元素

javascript - ReactJS:更新对象状态内的数组不会触发重新渲染

JavaScript计算字符串的长度

javascript - Chrome 扩展 : how to pass ArrayBuffer or Blob from content script to the background without losing its type?

javascript - 我在网上找到这个 "[\\?&]v=([^&#]*)"谁能给我解释一下

Javascript - 如何在某个索引处启动 forEach 循环