0

我有一个看起来像这样的函数:

function SomeFunction() {

  var SomeVar;

  if (SomeCondition) {
     SomeVar = 4;
  }
}

这相当于:

function SomeFunction() {

  if (SomeCondition) {
     var SomeVar = 4;
  }
}

仅当条件为真时才使用 var 语句是否会产生影响,是否有任何最佳实践或性能影响

谢谢。

编辑:是的,我知道没有块范围,只有函数范围。

4

5 回答 5

4

它们的功能完全相同,但是对于将其放置在何处有两种思想流派:

一组说你应该把它放在函数的顶部,因为这样可以避免你依赖(不存在的)块作用域的错误印象。

另一组说您应该将它放在适当的块中,因为这表明您打算将变量视为块作用域而不在其他任何地方使用它。

据我所知,我是第二组的唯一成员。

于 2012-07-12T17:13:54.393 回答
3

放置var语句的位置对您的代码没有影响。这纯粹是风格问题。

有些人觉得将 放在块var的开头会更清楚function。Javascript 中变量的生命周期与声明它的函数相关,而不是与作用域相关。许多其他花括号语言的做法恰恰相反,这对许多新用户来说是一个困惑的根源。因此人们相信在函数的开头声明会导致更清晰的代码。

于 2012-07-12T17:11:55.350 回答
1

在 JavaScript 中,像 C/C++ 中的变量没有块作用域。因此,即使您在if () {}块中声明了变量,该变量实际上也是在函数的开头立即创建的。这种“拉起声明”的效果通常被称为“提升”。

虽然两个代码都是正确的,但第一个代码在语义上可能更好,因为它强调了变量存在的事实,无论是否SomeCondition为真。

于 2012-07-12T17:15:13.567 回答
0

这两者实际上是等价的。阅读“提升”“功能和块范围”

就速度而言,您最好使用第二种情况 - 将声明和赋值组合在同一条语句中。请参阅:http: //jsperf.com/stackoverflow-frenchie

于 2012-07-12T17:12:00.450 回答
0

把它放在函数的开头。无论如何,它总是在运行时移动到那里,但如果你把它放在真正执行的地方,它就会消除混乱/不真实的假设。

所以在你的情况下,第一个片段。

(另外,纯粹的风格,写除了类camelCase,而不是PascalCase之外的所有东西的标识符)

于 2012-07-12T17:15:31.963 回答