多次声明变量

Ale*_*lex 5 javascript variables

for(var i = 0; i < 100; i++){
  var foo = 5;

}
Run Code Online (Sandbox Code Playgroud)

它有效...但是这很糟糕吗?

我知道我可以var foo在外面声明,但为什么在我只在循环中使用它时呢?

Jos*_*ers 4

随着时间的推移,我的个人风格逐渐形成了一种偏好,即在我所使用的特定语言的“思维”中声明变量的“实际位置”。对于 JavaScript,这意味着将变量和函数声明放在语言将提升的位置不管怎样,他们。

这是为了清晰、精确的沟通、理解、可维护性,让我自己的心理过程与语言过程保持平行,仅举几个很好的理由。

因此,在这种特殊情况下,我不会将var foo = 5;声明放入循环体中for,原因很简单,它没有执行看起来正在执行的操作,即它实际上并没有重新声明/重新确定变量的作用域每次迭代。(将var声明放在 for 循环头的初始化部分(初始化;条件;事后)会更合理,并且肯定是将其放在确实具有块级变量的语言中的正确位置,例如当 JavaScript 完成采用let- 块级作用域的样式声明。)

笔记:

  • 这种做法可能看起来并不“正常”。我的大脑更喜欢让变量“接近”它们的使用,而我目前的实践并不自然地适应我的大脑的工作方式。但作为一名程序员多年来,经历过困惑、沟通不畅、误解、无法解释的不可维护的代码等,这足以证明我需要遵守这种在与变量相对应的位置声明变量的风格。实际范围,无论语言如何。

  • 这种做法对我来说的另一个好处是,它鼓励我保持函数的模块化和合理的大小。

  • 同样,遵循这种做法会自动帮助我以合理的方式组织代码。例如,如果将我的函数放在第一位会导致在我实际正在处理的代码之前出现过多的函数,并且因此我对必须向下两页编辑我的程序感到恼火,那么遵循这种风格会自动激励我组织我的程序代码转换成不同文件的适当结构。

PS One 可能会提出这样一个观点,即某些函数太长,这种做法会使变量声明最终远离它们的使用位置。是的,我见过确实如此的代码,甚至可能看到过无法帮助的代码。然而,我忍不住观察到对于散文作者和计算机程序员来说同样如此的相似之处。随着技能水平的提高,作者句子的长度(以及程序员函数的大小)往往会增加,然后随着技能水平继续提高,句子的长度(以及程序员函数的大小)往往会缩短一次更多的。