javascript在哪里放var语句

时间:2012-07-12 17:10:54

标签: javascript

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

function SomeFunction() {

  var SomeVar;

  if (SomeCondition) {
     SomeVar = 4;
  }
}

这相当于:

function SomeFunction() {

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

仅当条件为真时才使用var语句会有所不同吗,是否有关于此的最佳实践或性能影响

感谢。

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

5 个答案:

答案 0 :(得分:4)

它们的功能完全相同,但有两种思路可以解释它的位置:

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

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

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

答案 1 :(得分:3)

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

有些人认为将var放在function块的开头会更清楚。 Javascript中变量的生命周期与声明它的函数有关,而与范围无关。许多其他大括号语言正好相反,这是许多新用户混淆的根源。因此,人们相信在函数开始时声明会导致更清晰的代码。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

这两者实际上都是等价的。阅读"hoisting""function and block scope"

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

答案 4 :(得分:0)

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

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

(另外,纯粹的样式,除了类camelCase之外的所有内容的写标识符,而不是PascalCase)