javascript - 为什么在 JavaScript 中不允许 let 和 const 关键字变量重新声明,而 var 关键字变量是允许的?
问题描述
我知道变量重新声明会导致我们出现语法错误并且它是非法的,但是 JavaScript 有它自己关于重新声明的奇怪概念。请我需要有关这些东西的指导。
1).当我们在 JavaScript 中使用 var 变量时,我试图理解这一点,它可以被重新声明。2).最后分配的值将更新为 var 标识符。3).我浏览了一些资源,我知道v8engine 没有重新声明 var 它只是将最新的值分配给相同的 var 标识符,可以知道这是完美的。4). 如果是这样,为什么在 JavaScript 中没有赋予 let 和 const 关键字同样的重新声明灵活性。5).这个复杂的东西背后发生了什么请解释一下
解决方案
在同一范围内重新声明同名变量的能力会让阅读脚本并试图理解它的人感到困惑。如果你在代码的某一行声明了一个变量,然后又再次声明了它,这很可能是一个错字或意外,因为它没有意义——如果你想重新分配变量,只需重新分配变量而不重新-声明它。
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
根据定义, a 是不可重新分配的。
推荐阅读
- nosql - 用于 Azure Functions 的 Cosmos DB 模拟
- ruby - 将 JS 文件注入 capybara chrome 无头
- scala - Play Framework 中是否有配置设置以在发送到客户端的响应中启用缓存控制标头
- html - 复选框元素下的额外空间
- visual-studio-code - 将 Visual Studio Code 中的 JavaScript 字符串重构/提取到 HTML 文件中
- scala - 如何火花提交 Play 框架项目
- amazon-redshift - 从 Redshift 获取最近 10 小时的数据
- cdi - “不满足的依赖关系” - 具有相同接口的不同无状态 Bean
- javascript - 图像图标不固定,屏幕尺寸可变
- sapui5 - 如何从 UI5 应用程序调用 CDS 视图生成的 Odata 服务