为何在JavaScript中执行let = 13不会报错?(Chrome控制台+Node.js)
为什么
let = 13不报错,但其他关键字如const/var会报错? 这个现象本质是ECMAScript规范为向后兼容做的特殊处理,核心原因如下:
关键字的分类差异
var和const属于严格保留字:无论严格模式还是非严格模式,任何语法场景下都不能将它们当作标识符(变量名)使用。所以var = 13或const = 13会直接触发语法错误——引擎会将它们识别为关键字,而非合法变量名。let属于受限保留字:ES6引入let之前,已有不少旧代码把let当作普通变量名(比如var let = 10;)。为兼容这类代码,规范做了妥协:- 在声明语句中(比如
let let = 13、const let = 123),let会被当作关键字,禁止作为变量名,因此报错。 - 在非声明的赋值/表达式场景(比如
let = 13、++let)且处于非严格模式时,let可被当作全局标识符使用,引擎不会将它识别为关键字,因此不会报错。
- 在声明语句中(比如
严格模式的约束
如果开启严格模式(代码顶部添加'use strict';),let = 13也会触发语法错误——严格模式下会严格限制所有保留字的使用,不允许将let当作标识符。
验证示例:
'use strict'; let = 13; // Uncaught SyntaxError: Unexpected token '='
简单总结:这是ES6为兼容旧代码给let开的非严格模式特例,而var、const没有这类兼容需求,属于严格保留字。
内容的提问来源于stack exchange,提问作者Mohammed Saeid
相关产品推荐
相关产品推荐

