Используя 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