You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用let作var声明的变量名无报错,用var作let声明的变量名却报错?

为什么var let = "Hi"合法但let var = "Hi"报错?

先看你给出的代码:

var let = "Hi";
console.log(let); // 输出 "Hi"
let var = "Hi";
console.log(var); // 语法错误

核心原因是JavaScript对不同保留关键字的限制规则不一样:

  • var是「永久硬保留关键字」:不管你用什么声明方式(var/let/const)、处于什么模式(严格/非严格),var都绝对不能用作变量名。它属于JavaScript语法的核心保留字,任何把var当作标识符的尝试都会直接触发语法错误,所以let var = "Hi"连语法检查都通不过。

  • let是ES6新增的保留关键字,但有兼容性例外:
    在非严格模式下,用var声明let作为变量名是被允许的——这是ES6规范特意留的兼容性口子,防止旧代码因为ES6新增关键字突然报错。但这种写法是不推荐的,而且一旦切换到严格模式,或者用let/const去声明let作为变量名,同样会报错:

    'use strict';
    var let = "Hi"; // 严格模式下触发语法错误
    let let = "Hi"; // 任何模式下都报错
    

简单来说,var是碰都不能碰的硬禁忌,而let的限制在非严格模式下用var声明时存在一个兼容例外,但这只是历史遗留的特殊情况,不是规范推荐的用法。

内容的提问来源于stack exchange,提问作者Toban Harnish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:24:02