【问题标题】:Why let and const keyword variables are not allowed to redeclaration in JavaScript, where var keyword variable is allowed?为什么在 JavaScript 中不允许 let 和 const 关键字变量重新声明,而 var 关键字变量是允许的?
【发布时间】:2021-08-02 09:57:41
【问题描述】:

我知道变量重新声明会导致我们出现语法错误并且它是非法的,但是 JavaScript 有它自己关于重新声明的奇怪概念。请问我需要这方面的指导。

1). 当我们在 JavaScript 中使用 var 变量时,我试图理解这一点,它可以被重新声明。 2).最后分配的值将更新为 var 标识符。 3).我浏览了一些资源,我发现 v8engine 没有重新声明 var,它只是将最新的值分配给相同的 var 标识符,可以知道这是完美的。 4). 如果是这样,为什么 在 JavaScript 中没有赋予 let 和 const 关键字同样的灵活性。 5).这个复杂的东西背后发生了什么,请解释一下

【问题讨论】:

  • 灵活性只是被认为没有用。
  • 重新声明 var 变量充其量是草率,最坏的情况是一个错误。 letconst 旨在通过防止重新声明来防止这种草率或意外错误。此外,根据定义,constconst。它无法获得分配给它的新值,因此重新声明 const 永远不会成为一种选择。

标签: javascript node.js global-variables


【解决方案1】:

在同一范围内重新声明同名变量的能力对于阅读脚本并试图理解它的人来说是困惑。如果你在代码的某一行声明了一个变量,然后又再次声明了它,这很可能是一个错字或意外,因为它没有意义——如果你想重新分配变量,只需重新分配变量 无需重新声明。

function getName(name) {
  // What did the script-writer mean to do here?
  // Did they forget that there's an argument called name already?
  var name = prompt('What is your name?');
  console.log('hi', name);
}
getName();

var 在技术上允许在同一范围内重新声明,但这仅仅是因为事情从一开始就是这样;现在将其更改为非法会破坏向后兼容性,即not done

letconst 被有意设计为不可重新声明,以避免这种混淆。可以说,不那么混乱的代码比灵活性更重要。当语言规则过于灵活时,编码会变得更加困难。 (示例见==...)

即使有可能,特别是重新声明 const 变量也没有任何意义,因为根据定义,const 是不可重新分配的。

【讨论】:

  • 非常感谢,我从 let 和 const 那里得到了一点,他们让它变得严格,对吗?
  • 是的,当代码更严格时通常会更容易。虽然在这种情况下,它不那么“更严格”,更“不那么草率”。
  • 一些语言允许重新声明常量,只要所有声明都具有相同的值:-)
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 2017-02-18
  • 1970-01-01
  • 2020-06-15
  • 2015-02-20
  • 2020-04-14
相关资源
最近更新 更多