javascript将var语句放在何处
我有一个函数如下所示:javascript将var语句放在何处,javascript,Javascript,我有一个函数如下所示: function SomeFunction() { var SomeVar; if (SomeCondition) { SomeVar = 4; } } 这相当于: function SomeFunction() { if (SomeCondition) { var SomeVar = 4; } } 仅在条件为真的情况下使用var声明是否会产生影响,是否存在与此相关的最佳实践或绩效影响 谢谢 编辑:是的,我知道没有块作用域
function SomeFunction() {
var SomeVar;
if (SomeCondition) {
SomeVar = 4;
}
}
这相当于:
function SomeFunction() {
if (SomeCondition) {
var SomeVar = 4;
}
}
仅在条件为真的情况下使用var声明是否会产生影响,是否存在与此相关的最佳实践或绩效影响
谢谢
编辑:是的,我知道没有块作用域,只有函数作用域。放置
var
语句的地方对代码没有影响。这纯粹是风格问题
有些人认为将
var
放在函数
块的开头更清楚。Javascript中变量的生存期与声明它的函数相关联,而不是作用域。许多其他的花括号语言正好相反,这是许多新用户感到困惑的根源。因此,人们相信在函数开始时声明会导致更清晰的代码 这两者实际上是等价的。仔细阅读并阅读
就速度而言,最好使用第二种情况——在同一语句中组合声明和赋值。请参阅:它们的功能完全相同,但有两种思想流派可以将其放在何处: 一个小组说你应该把它放在函数的顶部,因为这样可以避免你依赖的错误印象(不存在的)块范围 另一个小组说你应该把它放在适当的块中,因为这表明你打算把变量当作块作用域来处理,而不在其他任何地方使用它
据我所知,我是第二组的唯一成员。在JavaScript中,像C/C++中那样的变量没有块作用域。因此,即使您在
if(){}
块中声明了变量,该变量实际上也会在函数的开头立即创建。这种“拉起”的效果通常称为“提升”
尽管这两个代码都是正确的,但第一个代码在语义上可能更好,因为它强调了一个事实,即无论
SomeCondition
是否为真,变量都存在。将其放在函数的开头。在运行时,它总是被移动到那里,但是如果你把它放在真正执行的地方,它会清除混乱/不真实的假设
在你的例子中,第一个片段
(另外,纯风格,除了类camelCase,而不是PascalCase之外,其他所有的东西都要写标识符)+1-如果您打算这样使用变量,我可以像在块作用域中一样声明它。我希望我能给您上一条语句第二次投票。@frenchie--解析阶段可能会稍微慢一点,但我对此表示怀疑,而且在任何情况下,都需要数百万行代码才能发现差异。一旦代码实际运行,就完全没有区别了。顺便说一句,你是法国人吗?这是一样的,第二个片段实际上总是被解释为第一个片段(但你可以从第二个片段中得出一些导致bug的假设)。正如其他人所指出的,它被称为“var提升”。@frenchie仅就文件大小而言,在一个缩小的文件中,手动提升可能比每个声明重2字节,但将它们组合在一起可以使您或编译器在组合
var
定义时减少4字节的文件大小。JSPerf上可能有一些东西在测试这一点,但我要概括地说,像这样的微优化在两个方向上几乎没有区别。JSPerf看起来真的差不多(到目前为止)除了Opera中一次运行的异常值之外,我还添加了几次函数运行,以模拟调用函数的频率比定义函数的频率更高的情况。我还添加了基本情况,其中从未设置任何变量。我的结果表明,将声明放在顶部不仅比放在块中快,甚至比不做作业都快!我真的要说的是,没有真正的性能影响。