Однострочные объявления "var" или одна строка в строке?

Я смотрю на документ Douglas Crockford Code Conventions for JavaScript, и он говорит, что var должен быть в алфавитном порядке и по одному на строку.

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

Однако стандарт jsLint (и jsHint) заключается в том, чтобы объявить их в одной строке, и он выдает эту ошибку, если это сделано Crockford путь

слишком много операторов var

Поэтому jsLint хочет сделать это следующим образом.

var a, c = node.className, i;

Это кажется мне довольно противоречивым, и хотя, вероятно, довольно минут в общем объеме программирования, я надеюсь получить это право, прежде чем я ошибаюсь.

Какова общепринятая практика при объявлении JavaScript-варов?

Ответ 1

LINT хочет один оператор объявления var, но его можно разложить на несколько строк.

var a, b, c;

или

var a,
    b,
    c;

Причина, по которой он хочет получить один оператор, заключается в том, чтобы избежать путаницы в отношении того, какие переменные относятся к локальной области. С помощью одного оператора var все локально ограниченные переменные содержатся в одном месте в пределах области действия, и каждый может быстро прочитать код, чтобы узнать, что это такое.

Кроме того, рекомендуется, чтобы этот оператор объявления находился в верхней части области видимости, так как механизм подъема JavaScript перемещает их туда до его выполнения в любом случае. При написании кода, чтобы ожидать, что оператор в верхней части области, механизм подъема не может вызвать каких-либо неожиданных действий.

Ответ 2

Ни один из способов не прав, но я обычно предпочитаю использовать объявления с одним строковым стилем в начале блока кода. Самое главное - сохранить его согласованным. Пример:

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

  // stuff..
}

Ответ 3

Даже комбинация в порядке. Это все о предпочтении. Если вы работаете с командой, задайте предпочтение и сохраните его.

var a, 
    c = node.className, 
    i;

Ответ 4

Аргумент в основном обсуждается в стиле, однако гораздо важнее согласовать стандартную и , чтобы ваша команда использовала ее последовательно.

Ответ 5

Другой вариант (это тот, который я использую):

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

Это дает понять, сколько переменных я объявляю и что они все связаны каким-то образом (поскольку я объявляю их в одном пространстве, они в основном всегда). Это также помогает различать переменные, которые уже имеют значения, и те, которые этого не делают. Тем не менее, я только объявляю переменные, не присваивая очень редко.

Если я работаю с кодом, который следует за другим стандартом, это то, что я делаю. И это самое главное: следуйте стилю вашего проекта. В противном случае, по вашему предпочтению. Если вам действительно все равно, используйте мой стиль;)

Ответ 6

Вы можете объявить несколько переменных и назначить их в одной строке. Это вопрос личных предпочтений.