我想知道是否有人可以将焦点放在我刚刚发现的一些奇怪行为上。因此,我在节点 REPL 中工作,在将代码粘贴到模块中之前运行代码,并且我打错了“let = 5”(好吧,没有完全填写该行)。我预计这会出错,但 REPL 接受了它,我可以通过表达式结果和 console.logs 看到该值。所以我开始修修补补。我知道在 REPL 中,没有 let/const/var 的变量被认为是全局的,但我想知道的是,为什么 REPL 允许我们像这样分配 let?下面我列出了我尝试过的东西(仅在 REPL 中,没有在模块脚本中尝试过)。
let = 5; //works
var = 5; //SyntaxError: Unexpected token "="
const = 5; //SyntaxError: Unexpected token "="
let let = 5; //SyntaxError: let is disallowed as a lexically bound name
var let = 5; //works
const let = 5; //SyntaxError: let is disallowed as a lexically bound name
let var = 5; //SyntaxError: Unexpected token "var"
var var = 5; //SyntaxError: Unexpected token "var"
const var = 5; //SyntaxError: Unexpected token "var"
let const = 5; //SyntaxError: Unexpected token "const"
var const = 5; //SyntaxError: Unexpected token "const"
const const = 5; //SyntaxError: Unexpected token "const"
那么为什么在逻辑let = 5上var let = 5(至少对我而言)所有这些语句都应该是语法错误时起作用?
编辑要添加,let在分配后用于分配变量时仍然有效。例如
let = 5;
let test = {};
console.log(let,test)
作品和展示5 {}