使用 `let` 重新声明一个变量会导致“Uncaught SyntaxError: redeclaration of let ...”

Let*_*hal 2 javascript variables variable-declaration

我有这样的代码:

let accessAllowed;

accessAllowed = (2>18) ? true : false;
alert(accessAllowed);
Run Code Online (Sandbox Code Playgroud)

但是,当我使用它时:

let accessAllowed;
let accessAllowed = (2>18) ? true : false;

alert(accessAllowed);
Run Code Online (Sandbox Code Playgroud)

结果是一个错误,并且 JavaScript 都不起作用。

作为 JS 的新手,我不确定这是否是let. 我在其他地方找不到任何关于此的信息。

Dai*_*Dai 6

您不能使用let重新声明变量,而您可以使用var

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

在相同的函数或块范围内重新声明相同的变量会引发 SyntaxError。

let具有不同的(可以说是更有用的)范围规则,而不是var帮助防止由var的怪癖引起的许多类型的错误,这些错误在其他语言中不存在,但必须保留在 JavaScript 中,以便与几十年前编写的脚本向后兼容。

旁注let

请注意,许多编程语言都有let关键字,并且经常使用它来声明变量和常量 - 但是请注意,每种语言的 使用let具有非常不同的行为,因此不要期望let在 JavaScript 中的行为像let在 Swift 中一样,例如。

  • JavaScript:let-声明一个变量,其范围仅限于封闭块,而不是var使用全局范围或函数范围(并且了解如何var在两者之间进行选择对于初学者来说并不容易理解)。因为在同一个范围内重新声明一个变量是一个无意义的操作,可能是在错误中完成的,它会给你一个编译器错误,而var在闭包内重新声明是有效的。
  • Swift: let-声明一个常量。请注意,“常量”不仅是文字值,还包括不可变的复杂对象。
  • Rust:let-引入了一个变量绑定。本质上与letJavaScript 相同,除了默认值是不可变的(就像在 Swift 中一样)。使用let mut来声明一个可变变量。
  • C#:let Selectand的 Linq 关键字简写SelectMany