var语句应该放在函数的顶部吗?

时间:2013-02-22 16:00:25

标签: javascript backbone.js jslint

如果您遵循jslint.com指南,它会让您将它们放在函数的顶部并合并多个这样的多个语句。

function(){
    var foo,
        moo,
        hoo;

但是,在学习underscore.js和backbone.js时,我发现没有遵循这个约定,它们会根据需要使用。例如。例如在_.each()

  for (var key in obj) {

一种方式更具可读性吗?是快一点吗?

我知道javascript没有块范围。

4 个答案:

答案 0 :(得分:2)

“哪种方式最快”很容易回答:无论哪种方式都可以让您快速编写和维护代码。这是关于源代码质量,而不是执行 - 解释器可以这样做。

较旧的编程语言(包括C的早期版本)仅支持函数开头的变量声明。这样做可以在一个地方立即概述函数中使用的变量:代码具有可预测的结构。之后添加了在任何地方声明变量的能力,因为许多人发现它很方便且好主意:它允许您在使用它们的地方附近声明变量,因此可以一起检查和管理声明和使用:代码具有更多的模块化结构。

由于这是关于人为因素,哪一个是“更好”是一个完全开放的问题。风格指南是另一回事:风格约定是一种合理的做事方式,不一定是唯一的好方法。但遵循约定会给您带来一致性的好处,并且代码的读者知道会发生什么。如果您在具有传统样式的上下文中编写代码,请按照它进行操作。你在清晰度和一致性方面获得的收益远远超过你可能放弃的东西,而不是遵循其他一些风格。

答案 1 :(得分:1)

这只是编程风格的问题,因为脚本的工作方式相同。

当变量被提升,即在函数中的代码开始之前声明,在代码的开头声明它们是有意义的,因为它更接近于正在发生的事情。

无论您在何处声明变量,性能都是相同的。

答案 2 :(得分:1)

没有更好的方法,两种方法之间没有速度差异。两者完全相同,因为声明是“提升”并在整个函数中可用。 (虽然在分配之前它们没有任何价值。)

尽管如此,我注意到人们倾向于在var循环中使用for作为循环变量,即使他们将其余的声明放在顶部。造成这种情况的原因可能是因为他们希望向代码阅读器发出信号,告知该var在函数的其余部分没有使用,并且是一个抛弃循环var(就好像它只与这个块有关。)

var的这些用法可能会被let取代,因为Javascript 1.7被广泛采用。

答案 3 :(得分:0)

通常会做出一些约定来帮助您阅读代码,使维护更便宜/更快,这种特定的约定可能会有所帮助,尽管我认为没有必要。

但是,你给出的例子是声明一个仅用于循环的增量变量,该变量不应该在循环之外使用(在极少数情况下除外),因此声明它是完全合理的它,使用它,一旦完成循环就忘记它(或清理它,尽管很少需要它)。