Возможно, самое важное, чему вы можете научиться, чтобы стать лучшим программистом, - это делать вещи простыми. В контексте идентификаторов это означает, что один идентификатор следует использовать только для представления одного понятия.

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

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

Это легче понять, если вы используете один идентификатор для URL, другой для строки запроса и, наконец, идентификатор для хранения значения параметра, которое вы искали.

Вот почему я предпочитаю `const`, а не ` let` в ES6. В JavaScript `const` означает, что идентификатор нельзя переназначить. (Не путать с неизменяемыми значениями. В отличие от истинных неизменяемых типов данных например, созданные Immutable.js и Mori, объект `const` может иметь измененные свойства.)

Если мне не нужно переназначать, я выбираю `const` по умолчанию вместо ` let`, потому что я хочу, чтобы использование было максимально ясным как можно в коде.

Я использую `let`, когда мне нужно переназначить переменную. Поскольку я использую одну переменную для представления чего-то одного, вариант использования `let`, как правило, относится к циклам или математическим алгоритмам.

Я не использую `var` в производственном коде ES6. В области видимости блока для циклов есть значение, но я не могу представить себе ситуацию, когда я предпочел бы `var`, а не ` let`. Это может быть удобно в среде REPL (Read Evaluate Print Loop), такой как отладчик или консоль узла, когда вы просто экспериментируете и переназначение может быть полезным.

`const` - это сигнал о том, что идентификатор не будет переназначен.

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

`var` теперь самый слабый доступный сигнал, когда вы определяете переменную в JavaScript. Переменная может быть или не быть переназначена, и переменная может или не может использоваться для всей функции или только для цели блока или цикла.

Предупреждение:

С `let` и ` const` в ES6 больше небезопасно проверять наличие идентификатора с помощью `typeof`:

function foo () {
  typeof bar;
  let bar = ‘baz’;
}
foo(); // ReferenceError: can't access lexical declaration
       // `bar' before initialization

Но с вами все будет в порядке, потому что вы последовали моему совету из Программирования приложений JavaScript и вы всегда инициализируете свои идентификаторы, прежде чем пытаться их использовать ...

P.S.

Если вам нужно освободить значение, отключив его, вы можете использовать `let` вместо ` const`, но если вам действительно нужно микроуправлять сборщиком мусора, вы вероятно, стоит вместо этого посмотреть «Slay'n the Waste Monster»:

Эрик Эллиотт - консультант по техническим продуктам и платформе, автор Composing Software, соучредитель EricElliottJS.com и DevAnywhere.io и наставник команды разработчиков. Он участвовал в разработке программного обеспечения для Adobe Systems, Zumba Fitness, The Wall Street Journal, ESPN, BBC, и ведущие музыканты, в том числе Ашер, Фрэнк Оушен, Metallica и многие другие.

Он ведет уединенный образ жизни с самой красивой женщиной в мире.