【问题标题】:Redeclaring a variable using `let` results in “Uncaught SyntaxError: redeclaration of let …”使用 `let` 重新声明变量会导致“Uncaught SyntaxError: redeclaration of let ...”
【发布时间】:2018-05-28 04:19:08
【问题描述】:

我有这样的代码:

let accessAllowed;

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

但是当我使用这个时:

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

alert(accessAllowed);

结果是一个错误,所有的 JavaScript 都不起作用。

作为 JS 的新手,我不确定这是否是 let 的一个功能。我在其他地方找不到任何关于此的内容。

【问题讨论】:

  • 您第二次使用 let 重新声明
  • 你知道(2>18) ? true : false; (2>18)是一样的吗?

标签: javascript variables variable-declaration


【解决方案1】:

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

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

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

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

关于let的旁注:

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

  • JavaScript:let - declares a variable whose scope is limited to the enclosing block,而不是使用全局作用域或函数作用域的var(初学者很难理解var如何在两者之间进行选择)。因为在同一范围内重新声明一个变量是一个没有意义的操作,可能会出错,它会给你一个编译器错误,而用var重新声明在闭包内是有效的。
  • 斯威夫特:let - declares a constant。请注意,“常量”不仅是文字值,还包括不可变的复杂对象。
  • 锈:let - Introduces a variable binding。本质上与 JavaScript 中的 let 相同,除了默认值是不可变的(就像在 Swift 中一样)。使用let mut 声明一个可变变量。
  • C#:letis a Linq keywordSelectSelectMany 的简写。
  • VBScript、VBA 和 VB6:Let 是声明类 property setter for a value-type 的关键字(即不是对象类型)。

【讨论】:

    【解决方案2】:

    Let 不能在同一范围内重新声明(您正在做的是重新声明,而不应该在第二行使用 'let' 关键字,而只会重新分配)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 2018-09-18
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多