我有一个看起来像这样的函数:
function SomeFunction() {
var SomeVar;
if (SomeCondition) {
SomeVar = 4;
}
}
这相当于:
function SomeFunction() {
if (SomeCondition) {
var SomeVar = 4;
}
}
仅当条件为真时才使用var语句会有所不同吗,是否有关于此的最佳实践或性能影响?
感谢。
编辑:是的,我知道没有块范围,只有功能范围。
答案 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)