Подтвердить что ты не робот

В чем преимущество инициализации нескольких переменных javascript с тем же ключевым словом var?

Когда я читаю javascript-код, который чист и написан людьми, которые, очевидно, очень хороши в этом, я часто вижу этот шаблон

var x = some.initialization.method(),
    y = something.els(),
    z;

В чем преимущество этого при написании

var x = some.initialization.method();
var y = something.els();
var z;

Второй формат легче поддерживать, поскольку каждая строка существует сама по себе. Таким образом, вы можете стереть строку или добавить строку, а не искать, чтобы увидеть, была ли она инициализирована первая или последняя переменная. Это также означает, что управление версиями diff/mergs будет работать лучше. Учитывая эти недостатки, я предполагаю, что есть преимущество перед первым форматом - но что это? Разумеется, они выполняются одинаково, потому что они одинаковы с парсером.

4b9b3361

Ответ 1

Есть небольшое преимущество в размере javascript, который отправляется в браузер; Google Closure компилятор в режиме "только для пробелов" скомпилирует одну версию var:

var x=some.initialization.method(),y=something.els(),z;

а multi - как:

var x=some.initialization.method();var y=something.els();var z;

Я изменил ваш else на els так, чтобы он компилировался.

Это не массовый выигрыш (особенно если вы также сжимаете файлы), и "простой" режим компиляции сделает это для вас в любом случае, поэтому я, вероятно, не буду слишком беспокоиться об этом, если вы не найдете более веские причины.

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

Ответ 2

Я не могу выдержать все переменные в одном из операторов, потому что объявление переменной может быть очень далеким от того, где оно фактически используется. Я знаю все аргументы для него, и эта переменная hoisting все равно перемещает все vars на вершину функции. Но когда я вижу переменную, объявленную в верхней части функции, и она не привыкает к другим 20 строкам, это приводит меня в замешательство, особенно для индексных переменных цикла

Ответ 3

Использование одного оператора var в верхней части ваших функций - это полезный шаблон для принятия. Он имеет следующие преимущества:

  • Предоставляет одно место для поиска всех локальных переменных, необходимых функции

  • Предотвращает логические ошибки, когда переменная используется до ее определения

  • Помогает вам забыть объявить переменные и, следовательно, свести к минимуму глобальные значения

  • меньше кода (для ввода и передачи по проводу:)

  • JSLint нравится этот шаблон

Единый шаблон var выглядит следующим образом:

function func() {
    var a = 1,
        b = 2,
        sum = a + b,
        myobject = {},
        i,
        j;

    // function body...

}

Для получения дополнительной информации смотрите там


Главное преимущество заключается в том, что у вас будут все переменные, определенные в самом начале вашей функции, поэтому вы не получите много глобальных переменных из переменных, объявленных без var, и ваш код не будет падать, потому что неуместной инструкции var (вызывающая переменная перед ее объявлением)

Ответ 4

Единственное реальное преимущество заключается в том, что он сохраняет пару байтов на переменную, которые в большом JS файле могут складываться; помните, что файлы JS часто отправляются по кабелю.

Лично я предпочитаю одиночный var в строке.

Ответ 5

Помимо размера проводной линии, это, вероятно, также помогает в производительности интерпретатора. Из Профессиональная Java Script для веб-разработчиков:

Один оператор может выполнять несколько операций быстрее, чем несколько операторов, выполняющих одну операцию. Тогда задача состоит в том, чтобы искать инструкции, которые можно объединить, чтобы уменьшить время выполнения всего script.

Далее было предложено объявить переменные в одной строке.