Используя ECMA6, мы можем объявлять переменные, используя var, let и const.
Каждая из них имеет свою конкретную функцию, и мы должны знать некоторых языковых форм поведения при их использовании.

вар

var - наиболее распространенный и хорошо известный тип объявления в ECMA.

Это приведет к следующему выводу:

Банан
_myVar - ›Apple
Apple

Как видите, переменная доступна в любой области, и ее значение также можно изменить.

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

Результат будет напечатан ниже (спасибо Михаилу Гончарову за исправление в этом примере):

Банан
_myVar - ›Apple
Apple

Он РАБОТАЛ без каких-либо ограничений O.O, и на это есть причина, и эта причина называется ПОДЪЕМ.

Подъем означает, что любая переменная, объявленная с помощью var, будет поднята (вы видите соединение ??) в начало выполнения и будет доступна для области.

Таким образом, мы можем подтвердить, что переменная, объявленная с помощью var, может использоваться в любом месте, эти переменные не имеют БЛОКИРОВКИ.

позволять

это ново, и мы можем использовать его для объявления переменных BLOCK SCOPED, например:

И теперь у нас есть несколько разных выходов:

_myVar - ›Apple
_mySecondVar -› Avocado
Apple
Uncaught ReferenceError: _mySecondVar не определена

И теперь мы видим, что _mySecondVar не существует вне функции, что помогает нам предотвратить ошибки манипуляции с переменными в неподходящие моменты.

const

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

Первое использование - определение простых переменных, которые нельзя изменить во время выполнения.

это вернется

Неперехваченная SyntaxError: идентификатор DELAY уже объявлен

Но, как объяснил наш новый друг Скотт Молинари, значения внутри константы в ECMA 6 можно изменить O.O, если вы используете ее как объект или массив, например:

в строке, которую мы пытаемся изменить структуру, будет отображаться ошибка

Неперехваченная ошибка типа: присвоение постоянной переменной.

Такая же ситуация для постоянного массива

И теперь у нас есть константа, которую нельзя изменить во время выполнения =)

НО… (в верхнем регистре, чтобы создать напряжение)

Если вы действительно хотите предотвратить изменения объекта, вы можете использовать Object.freeze (спасибо Marek Szkudelski), как в примере ниже:

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

Это работает только для непосредственных свойств объекта, если что-то вложено, вам нужно реализовать функцию для глубокой заморозки вашего объекта, есть хороший пример в упомянутой ранее ссылке Мозилы.

Заключение

var = глобальная переменная и подъем

let = блокировать переменные области видимости

const = Константы, но если вы используете в качестве объекта, свойства можно изменить, если вы не используете Object.freeze

и все =)

Сообщите нам свои мысли по этому поводу ^^ V, и если вы ищете хорошее место для размещения своих приложений, нажмите здесь и получите 100 долларов для тестирования =).

Фото Лоренцо Кафаро из Pexels