在JavaScript中是否有理由不将'var'替换为'let'?

在JavaScript中是否有理由不将'var'替换为'let'?,javascript,ecmascript-6,Javascript,Ecmascript 6,用JavaScript向我的长辈提出一个问题:抛开这样一个事实,在我看来,在绝大多数情况下,没有理由使用varoverlet。当然,如果您在if语句中定义了一个变量,这不是一回事,但是除了scope之外,还有其他原因可以使用一个变量而不是另一个吗 编辑:要清楚,这个问题是关于JavaScript中的最佳实践(即利弊),而不是关于var和let之间差异的性质 谢谢 不,我认为没有理由。从我所读到的内容来看,var保留在ES6中,以便向后兼容。我读过的大多数文章都建议用let逐步替换所有var事件。

用JavaScript向我的长辈提出一个问题:抛开这样一个事实,在我看来,在绝大多数情况下,没有理由使用
var
over
let
。当然,如果您在
if
语句中定义了一个变量,这不是一回事,但是除了scope之外,还有其他原因可以使用一个变量而不是另一个吗

编辑:要清楚,这个问题是关于JavaScript中的最佳实践(即利弊),而不是关于
var
let
之间差异的性质


谢谢

不,我认为没有理由。从我所读到的内容来看,
var
保留在ES6中,以便向后兼容。我读过的大多数文章都建议用
let
逐步替换所有
var
事件。当然,这应该考虑到差异,例如您在
if
块中提到的差异。我现在只在ES6代码中使用
let
。使用
var
没有什么比让
let
做得更好的了。如果需要整个函数范围,请在函数顶部创建
let

我注意到有一个区别。在全局范围内定义变量时,定义为
var
的变量可以通过
window.variable
访问,而定义为
let
的变量不能通过
window
对象访问。但是使用正确编写的模块代码,不允许
var
语句泄漏到
窗口,因此这并不重要


我还建议使用
const
而不是
let
,用于变量引用(相对于原始变量的值)不会发生变异的情况。

@jedi,不,这是一个不同的重复查找器,总是反应过度:D@estus我不同意“最佳实践”问题是基于观点的。堆栈溢出的病态之处在于,所有这些问题滥用者通常都过于直接地回答问题。“最佳实践”的意思是“赞成和反对”,但他们把它理解为“你的观点是什么”。“这里有许许多多的重大问题被这样滥用了。@daveslab,我能想到的唯一不改变一切的原因是暂时的死区。”@RoboRobok,我同意stackoverflow有很多问题,包括这个让我很恼火的问题。除此之外,我最近开始回答问题,最让人扫兴的是关于简单事物的答案得到3-5个喜欢,而当我花一个小时阅读OP的代码或详细解释一个概念时,最多只能从OP中得到一个喜欢