【问题标题】:Single line 'var' declarations, or one per line? [closed]单行“var”声明,还是每行一个? [关闭]
【发布时间】:2012-02-09 21:30:20
【问题描述】:

我正在查看 Douglas Crockford 的 Code Conventions for JavaScript 文档,他说 vars 应该按字母顺序排列,并且每行一个。

var a;                  // array of class names
var c = node.className; // the node's classname
var i;                  // loop counter

但是,jsLint(和 jsHint)标准是将它们声明在一行中,如果按照 Crockford 的方式进行,则会引发此错误

var 语句太多

因此,jsLint 希望这样做。

var a, c = node.className, i;

这对我来说似乎很矛盾,虽然在整个编程范围内可能相当微小,但我希望在我弄错之前把它弄好。

声明 JavaScript 变量时普遍接受的做法是什么?

【问题讨论】:

  • 我每行投一个。
  • 另一位单行倡导者;更容易阅读,IMO。
  • 如果你需要按字母顺序排列,我认为这个函数太大了......
  • 我倾向于每行一个,但只有一个 var 语句(将以下标识符缩进到与第一个相同的位置)。但这只是个人喜好问题。
  • 哇,有争议的问题。许多很好的答案,但也有许多接近的投票。

标签: javascript jslint


【解决方案1】:

LINT 需要一个 var 声明语句,但它可以分布在多行中。

var a, b, c;

var a,
    b,
    c;

它需要一条语句的原因是为了避免混淆哪些变量属于本地范围。使用单个 var 语句,所有本地范围的变量都包含在范围内的单个位置,任何人都可以快速阅读代码以查看它们是什么。

进一步建议将此声明语句放在作用域的顶部,因为 JavaScript 提升机制无论如何都会在执行之前将它们移到那里。通过编写代码以期望该语句位于作用域的顶部,提升机制不会导致任何意外行为。

【讨论】:

    【解决方案2】:

    这两种方法都不对,但我通常更喜欢在代码块的开头使用单行样式声明。最重要的是保持一致。示例:

    function() {
      var foo = "bar",
          number = 123,
          etc = "...";
    
      // stuff..
    }
    

    【讨论】:

    • 感谢@jdc0589,这很有帮助。我想我不应该说“弄错”,因为我知道这两种方式都有效。我更倾向于普遍接受的方法,答案中的证据肯定指向这种方法。
    【解决方案3】:

    即使是组合也可以。这都是关于偏好的。如果您与团队合作,请询问偏好并保持一致。

    var a, 
        c = node.className, 
        i;
    

    【讨论】:

    • 啊,是的,这很好。适合两个方向。不违反 jsLint,并且仍然遵守 Crockford 的标准。
    【解决方案4】:

    争论主要是关于风格的讨论,但是,就标准达成一致让您的团队始终如一地使用它更为重要。

    【讨论】:

      【解决方案5】:

      另一种选择(这是我使用的)是:

       var a = ...,
           b = ...,
           c, d;
      

      这清楚地表明我声明了多少变量,并且它们都以某种方式相关(因为我在同一个空间中声明它们,它们基本上总是如此)。它还有助于区分已经具有值的变量和没有值的变量。也就是说,我只声明变量而很少分配。

      除非我正在使用遵循不同标准的代码,否则我就是这样做的。这是最重要的事情:遵循项目的风格。否则,请按照您的喜好。如果您真的不在乎,请使用我的风格;)

      【讨论】:

      • “说清楚”?我不跟。快速浏览显示您正在声明三个 variables ,因为共有三行。但是,仔细检查表明您实际上是在声明四个。你真的觉得用三行声明四个变量就清楚了吗?
      【解决方案6】:

      您可以声明多个变量并在同一行中分配它们。这是个人喜好问题。

      【讨论】:

        猜你喜欢
        • 2012-09-02
        • 1970-01-01
        • 2020-12-13
        • 1970-01-01
        • 2017-11-10
        • 2021-05-18
        • 1970-01-01
        • 2013-03-28
        • 2019-06-03
        相关资源
        最近更新 更多