JavaScript ES6+: var, let или const?
JavaScript

JavaScript ES6+: var, let или const?

Оригинал: JavaScript ES6+: var, let, or const?, Eric Elliott

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

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

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

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

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

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

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

Я не использую ‘var’ в ES6. Я не могу придумать ситуацию, когда бы предпочел ‘var’ вместо ‘let’.

‘сonst’ — это признак того, что идентификатор не будет переприсвоен.

‘let’ — это признак переменной, которая может быть переприсвоена, как счетчик цикла или значение в математическом алгоритме. Также это признак того, что переменная используется только в том блоке, в котором она определена, а не во всей функции.

‘var’ — это самый слабый признак переменной в JavaScript. Такая переменная может переприсваиваться или не переприсваиваться, может использоваться как в блоке, так и во всей функции.

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

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


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

Но вы можете воспользоваться моим советом из книги “Programming JavaScript Applications” и всегда инициализировать переменные перед использованием…

Рассылка
Подпишитесь на рассылку и получайте дайджест новостей и статей.
Никакого спама!
Подписаться