В JavaScript можно объявить несколько переменных следующим образом:
var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;
... или так:
var variable1 = "Hello World!",
variable2 = "Testing...",
variable3 = 42;
Один метод лучше / быстрее, чем другой?
javascript
variables
coding-style
performance
declaration
Стив Харрисон
источник
источник
Ответы:
Первый способ проще в обслуживании. Каждое объявление - это отдельный оператор в одной строке, поэтому вы можете легко добавлять, удалять и изменять порядок объявлений.
При втором способе раздражает удаление первого или последнего объявления, поскольку они содержат
var
ключевое слово и точку с запятой. И каждый раз, когда вы добавляете новое объявление, вы должны изменить точку с запятой в старой строке на запятую.источник
Помимо удобства обслуживания, первый способ исключает возможность создания глобальных переменных аварии:
Пока второй способ менее прощающий
источник
var variable1 = "Hello World!", variable2 = "Testing...", variable3 = 42;
. Пропавший,
пропадет, но я согласен, что это рискованноPossible Fatal Error
если я пропущу кому, ура для меня!Обычно для организации используется один
var
оператор в каждой области . То, как все «области видимости» следуют похожему шаблону, делает код более читабельным. Кроме того, двигатель все равно «поднимает» их наверх. Таким образом, хранение ваших деклараций подражает тому, что будет происходить более тесно.источник
var
заявления. полная противоположность верна. см. документацию и этот примерЭто намного удобочитаемее, если вы делаете это так:
Но занимает меньше места и строк кода таким образом:
Это может быть идеально для экономии места, но пусть JavaScript-компрессоры справятся с этим за вас.
источник
Может так
За исключением случаев изменения первой или последней переменной, ее легко поддерживать и читать.
источник
Это просто вопрос личных предпочтений. Нет разницы между этими двумя способами, за исключением нескольких байтов, сохраненных во второй форме, если вы удалите пробел.
источник
ECMAScript6 представил назначение деструктурирования, которое работает довольно хорошо:
[a, b] = [1, 2]
a
будет равно1
иb
будет равно2
.источник
let [aVar, bVar, cVar, xVar, yVar, zVar] = [10, 20, 30, 40, 50];
Итак, лично я не рекомендую это.более читабельно, чем:
Но они делают то же самое.
источник
var<space>
, его<space><space><space><space>
var<space>
илиvar<tab>
против<tab>
. Все еще в значительной степени спорный.Используйте ES6 Destructuring assignment : он распаковывает значения из массивов или свойства из объектов в отдельные переменные.
источник
Мое единственное, но важное использование для запятой находится в цикле for:
Я пошел сюда, чтобы посмотреть, нормально ли это в JavaScript.
Даже видя, как это работает, оставался вопрос, является ли n локальным для функции.
Это подтверждает, что n является локальным:
На мгновение я не был уверен, переключаясь между языками.
источник
Хотя оба они действительны, использование второго препятствует неопытным разработчикам размещать операторы var повсеместно и вызывать проблемы с подъемом. Если в верхней части функции есть только одна переменная на функцию, тогда проще отладить код в целом. Это может означать, что строки, в которых объявлены переменные, не так явны, как некоторым.
Я чувствую, что компромисс стоит того, если это означает отучить разработчика от отбрасывания 'var' везде, где он чувствует себя.
Люди могут жаловаться на JSLint, я тоже так делаю, но большая часть его направлена не на исправление проблем с языком, а на исправление вредных привычек кодеров и, следовательно, на предотвращение проблем в коде, который они пишут. Следовательно:
«В языках с областью видимости блока обычно рекомендуется объявлять переменные на сайте первого использования. Но поскольку JavaScript не имеет области видимости блока, разумнее объявить все переменные функции в верхней части функции. рекомендовал использовать один оператор var для каждой функции. " - http://www.jslint.com/lint.html#scope
источник
Я думаю, что это вопрос личных предпочтений. Я предпочитаю делать это следующим образом:
источник
Еще одна причина, по которой следует избегать использования одной версии оператора (single var ), - отладка. Если исключение выдается в любой из строк присваивания, трассировка стека показывает только одну строку.
Если у вас было 10 переменных, определенных с помощью синтаксиса запятой, у вас нет возможности напрямую узнать, какая из них была виновником.
Индивидуальная версия заявления не страдает от этой двусмысленности.
источник
Понятие «Сплоченность через сцепление» может применяться более широко, чем просто объекты / модули / функции. Это может также служить в этой ситуации:
Второй пример, предложенный OP, соединил все переменные в одном выражении, что делает невозможным взять одну из строк и переместить ее в другое место, не нарушая вещи (высокая связь). Первый пример, который он привел, делает присвоения переменных независимыми друг от друга (слабая связь).
«Низкая связь часто является признаком хорошо структурированной компьютерной системы и хорошего дизайна, а в сочетании с высокой связностью поддерживает общие цели высокой читаемости и удобства обслуживания».
http://en.wikipedia.org/wiki/Coupling_(computer_programming)
Так что выбирай первый.
источник
Я знаю старый пост, но добавлю небольшую деталь перспективы для коллег-гуглеров:
Проблема с ремонтопригодностью может быть легко решена с помощью небольшого форматирования.
Я использую это форматирование строго как личное предпочтение. Я пропускаю этот формат для отдельных объявлений, конечно, или там, где он просто склеивает работы.
источник
Я считаю, что до того, как мы начали использовать ES6, подход с одиночным объявлением var не был ни хорошим, ни плохим (в случае, если у вас есть линтеры и
'use strict'
. Это было действительно вкусовое предпочтение. Но теперь все изменилось для меня. Есть мои мысли в пользу многострочного объявления :Теперь у нас есть два новых типа переменных, и они
var
устарели.const
Полезно использовать везде, где вам действительно нужноlet
. Поэтому довольно часто ваш код будет содержать объявления переменных с назначением в середине кода, и из-за видимости блока вы часто будете перемещать переменные между блоками в случае небольших изменений. Я думаю, что это более удобно делать с многострочными декларациями.Синтаксис ES6 стал более разнообразным, мы получили деструкторы, строки шаблонов, функции стрелок и необязательные назначения. Когда вы интенсивно используете все эти функции с одиночными объявлениями var, это ухудшает читабельность.
источник
Я думаю, что первый способ (несколько переменных) лучше, так как в противном случае вы можете получить это (из приложения, использующего Knockout), которое, на мой взгляд, трудно прочитать:
источник