为什么 let 和 const 关键字变量不允许在 JavaScript 中重新声明,而 var 关键字变量是允许的?
Why let and const keyword variables are not allowed to redeclaration in JavaScript, where var keyword variable is allowed?
我知道变量重新声明会导致语法错误,这是非法的,但 JavaScript 对重新声明有自己的怪异概念。我需要关于这方面的指导。
1)。当我们在 JavaScript 中使用 var 变量时,我试图理解这一点,它可以重新声明 。
2).最后分配的值将更新为 var 标识符。
3).我浏览了一些资源,我发现 v8engine 没有重新声明 var 它只是将最新值分配给相同的 var 标识符 ,好的,知道这是完美的。
4). 如果是这样,为什么 重新声明没有给予 let 和 JavaScript 中的 const 关键字 相同的灵活性。
5).请解释一下这个复杂的东西背后发生了什么
在同一范围内重新声明同名变量的能力使阅读脚本并试图理解它的人感到困惑。如果你在代码的某一行声明了一个变量,然后又声明了它,这很可能是错字或意外,因为它没有意义——如果你想重新分配变量,just重新分配变量而不重新声明它。
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
在技术上允许在同一范围内重新声明,但这只是因为事情从一开始就是这样运作的;现在将其更改为非法会破坏向后兼容性,即 .
let
和 const
被有意设计为 不可重新声明 以避免此类混淆。更少混淆的代码可以说比灵活性更重要。当语言规则 太 灵活时,编码会变得更加困难。 (参见 ==
示例...)
即使可能,重新声明一个 const
变量也没有任何意义,因为根据定义,const
是不可重新赋值的。
我知道变量重新声明会导致语法错误,这是非法的,但 JavaScript 对重新声明有自己的怪异概念。我需要关于这方面的指导。
1)。当我们在 JavaScript 中使用 var 变量时,我试图理解这一点,它可以重新声明 。 2).最后分配的值将更新为 var 标识符。 3).我浏览了一些资源,我发现 v8engine 没有重新声明 var 它只是将最新值分配给相同的 var 标识符 ,好的,知道这是完美的。 4). 如果是这样,为什么 重新声明没有给予 let 和 JavaScript 中的 const 关键字 相同的灵活性。 5).请解释一下这个复杂的东西背后发生了什么
在同一范围内重新声明同名变量的能力使阅读脚本并试图理解它的人感到困惑。如果你在代码的某一行声明了一个变量,然后又声明了它,这很可能是错字或意外,因为它没有意义——如果你想重新分配变量,just重新分配变量而不重新声明它。
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
在技术上允许在同一范围内重新声明,但这只是因为事情从一开始就是这样运作的;现在将其更改为非法会破坏向后兼容性,即
let
和 const
被有意设计为 不可重新声明 以避免此类混淆。更少混淆的代码可以说比灵活性更重要。当语言规则 太 灵活时,编码会变得更加困难。 (参见 ==
示例...)
即使可能,重新声明一个 const
变量也没有任何意义,因为根据定义,const
是不可重新赋值的。