的JavaScript放在哪里var语句
我有一个看起来像这样的功能:的JavaScript放在哪里var语句
function SomeFunction() {
var SomeVar;
if (SomeCondition) {
SomeVar = 4;
}
}
这相当于:
function SomeFunction() {
if (SomeCondition) {
var SomeVar = 4;
}
}
是否仅当使用条件为真化妆var声明是否有任何最佳做法或性能影响有关这方面?
谢谢。
编辑:是的,我知道有没有块范围,只是功能范围。
这些都是实际上等价的。请阅读"hoisting"和"function and block scope"。
至于速度的话,你最好使用第二种情况 - 组合在同一个语句声明和分配。请参阅:http://jsperf.com/stackoverflow-frenchie
他们的功能完全一样,但也有在哪里把它两个思想流派:
一组说,你应该把它放在函数的顶部,因为这避免了错误的印象,你依赖于(不存在的)块范围。
另一组说,你应该把它放在适当的块,因为这标志着你打算把变量就好像它是块范围的,而不是使用任何其他地方。
据我所知,我是第二组的唯一成员。
在JavaScript中,没有像C/C++这样的变量的块范围。因此,即使您在if() {}
块中声明变量,该变量实际上也是在函数的开头立即创建的。 “拉升声明”的效果通常称为“提升”。
尽管两个代码都是正确的,但第一个代码在语义上可能更好,因为它强调变量存在而不管SomeCondition
是否为真的事实。
感谢您的回答。对性能有任何想法? – frenchie 2012-07-12 17:18:13
把它放在函数的开头。无论如何,它在运行时总是被移动到那里,但是如果你把它放在真正执行的地方,它会清除混淆/不真实的假设。
所以在你的情况下,第一个片段。
(也纯粹的风格,除了写类驼峰一切的标识,不PascalCase)
感谢您的回答。对性能有任何想法? – frenchie 2012-07-12 17:18:03
它也是一样,第二个片段实际上总是被解释为它是第一个(但是你可以从第二个片断中得出一些错误主导的假设)。正如其他人指出的那样,它被称为“var提升”。 – 2012-07-12 17:19:24
@frenchie在谈到文件大小时,在缩小文件中,每次声明手动提升可能会增加2个字节,但将它们组合在一起使您或编译器在组合'var'定义时可以减小4个字节的文件大小。 JSPerf可能会对此进行测试,但我会推测这样的微观优化在两个方向上几乎没有区别。 – 2012-07-12 17:23:16
感谢您的回答。对性能有任何想法? – frenchie 2012-07-12 17:18:37
我已经更新了我的答案,并有性能细分。 – Wex 2012-07-12 17:21:53
JSPerf真的看起来像是差不多(到目前为止),但在Opera中一次运行看起来像是异常值。 – 2012-07-12 18:08:20