let=0
不显示任何语法错误,但是
var=0
这是什么?(我在Safari上测试过)
然而,我试过了
console.log(let)
但是它有错误,似乎'let'不是一个已定义的变量。为什么会发生这种情况?
let=0
不显示任何语法错误,但是
var=0
这是什么?(我在Safari上测试过)
然而,我试过了
console.log(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);
var
是一个保留字,不能用作全局变量的名称。但是let
同样也是一个保留字,并且与var
不同之处在于它可以被用作变量名。
let
是在ES6版本中添加的。为了兼容旧代码,其中变量名可能会使用let
,将其用作名称仍是正确的。而var
是从Javascript开始即添加的,因此为什么要禁止使用它呢。
let = 0;
console.log(let);
Javascript在ES5中有一组保留关键字:
break、do、instanceof、typeof、case、else、new、var、catch、finally、return、void、continue、for、switch、while、debugger、function、this、with、default、if、throw、delete、in、try
在JavaScript中,将保留关键字用作变量或函数名是非法的。例如,以下代码会抛出一个SyntaxError,其中指出“无法使用关键字‘delete’作为变量名”:
var delete = 1;
但在ES5中,使用ES6保留字(如let)作为变量名是完全可以的。
var let = 1;
ES5定义了两种语言模式modes
。在引入ES5之前存在的常规JavaScript被认为是sloppy mode
,而自ES5以来,JavaScript程序员可以选择在strict mode
下编写他们的程序。严格模式引入了一组新的JavaScript规则,包括附加的保留字。这组关键字被称为FutureReservedWord
。以下是列表:
implements,interface,let,package,private,protected,public, static,yield
在非严格模式的JavaScript中,不强制执行FutureReservedWord关键字。但在严格模式下,它们被视为保留字,将其用作变量名称是不合法的。
更多信息在此处
因此,如果不在严格模式下,可以使用let
作为变量名。但var
始终是一个保留关键字。
所以你可以做类似于
var let = "some thing uneasy!";
console.log(let);
但是你仍然无法做到
let let = 5;
这是因为从词法上来看它是不正确的。JS会将其视为多个声明,如果你使用逗号分隔你的声明,你不应该重复使用let。要么从每个声明中删除let,要么使用分号。
let
和 static
不属于关键字列表,除非它们在 严格模式 中被使用。在严格模式代码中,let
和 static
会通过静态语义限制而不是词法语法被视为保留关键字。