С новыми версиями любой технологии появляются новые функции. И часто не рекомендуется использовать некоторые старые функции, если они не являются устаревшими. Для объявления переменных / объектов ES2015 предлагает два новых ключевых слова - let и const (при этом var также поддерживается для обратной совместимости).

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

Подъем: переменные, объявленные с помощью var, поднимаются наверх. Это не относится к let и const. Другими словами, для переменных, объявленных с помощью var, если вы объявили переменную в середине кода, но по ошибке начали использовать до ее объявления, она все равно будет работать. Такое же поведение не будет работать, если переменные объявлены с помощью let / const. См. Ниже фрагмент кода в качестве примера для лучшего понимания:

Область действия блока: let и const предлагает область действия блока, а var - нет. Это означает следующее: если переменная let / const объявлена ​​в условном операторе или в цикле, срок жизни этой переменной будет только до этого блока, а не до всю содержащую функцию или скрипт. В то время как для переменных типа var их областью действия становится вся включающая функция или сценарий (глобальный). Например: в приведенном ниже коде счетчик объявляется с использованием ключевого слова let и var:

В первом фрагменте кода намерение разработчика состоит в том, чтобы использовать переменную 'i' только внутри цикла 'for', однако переменная жива даже вне цикла. . Тогда как во втором фрагменте кода время жизни переменной « ограничено только содержащим его циклом «for», а не вне его.

Константа - это действительно константа? Помимо описанного выше поведения с ключевым словом let, const в основном используется для объявления переменных, значение которых не меняется. Например:

const PI = 3,14;

Если мы попытаемся изменить значение PI, будет выдана ошибка (TypeError: присвоение const). Таким образом, это работает, как ожидалось, для примитивных типов данных, таких как число, логическое значение и т. Д. Однако это поведение немного отличается при работе со ссылочными типами. После того, как объект или массив объявлен и назначен переменной типа const, вы не можете изменить ссылку на переменную, но свойства объекта или содержимое массива по-прежнему могут быть изменены.

В приведенном выше коде, как вы можете видеть, массив foo нельзя присвоить null или другому пустому массиву, поскольку начальное значение foo является ссылкой на память (адресом). То же самое и с объектом bar, где bar не может быть назначен пустой объект. Однако вы можете изменить содержимое массива или объекта, добавляя или удаляя элементы из массива ИЛИ добавляя / удаляя свойства из объекта (или обновляя значение в массиве или свойстве объекта).

В заключение - если мы зададим вопрос еще раз - можем ли мы просто заменить var на let или const .. IMO это может потребовать небольшого рефакторинга кода, чтобы убедиться, что переменные правильно объявлены в нужных местах. Следует проявлять осторожность при использовании const при работе со ссылочными типами.

Удачи, удачного кодирования :) Предложения / исправления приветствуются ..