使用'let'重新分配变量不起作用

时间:2017-12-14 06:33:13

标签: javascript

我有这样的代码:

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

然而,当我使用它时:

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

结果是错误,JavaScript都没有。

作为JS的新手,我不确定 - 这是'让'的特色吗?我在其他地方找不到任何相关的东西。

2 个答案:

答案 0 :(得分:4)

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

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

  

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

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

let上的旁注:

请注意,许多编程语言都有let关键字,并经常用它来声明变量和常量 - 但请注意,每种语言对let的使用都有不同的行为,所以不要指望{{1例如,JavaScript中的行为类似于Swift中的let

  • JavaScript:let - declares a variable whose scope is limited to the enclosing block,而不是使用全局范围或功能范围的let(并了解var在两者之间选择的方式不是易于初学者理解)。因为在同一范围内重新声明变量是一个无意义的操作,可能是在错误中完成的,它会给你一个编译器错误,而用var重新声明在一个闭包内是有效的。
  • 斯威夫特:var - declares a constant。请注意,“常量”不仅是文字值,还包括不可变的复杂对象。
  • Rust:let - Introduces a variable binding。与JavaScript中的let基本相同,除了默认值是不可变的(如在Swift中)。使用let声明一个可变变量。
  • C#:let mut is a Linq keyword letSelect的简写。

答案 1 :(得分:0)

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