Var, Let и Const — зарезервированные ключевые слова в JavaScript, используемые для объявления переменных/констант.
Давайте сначала поговорим о «var».
- Var ограничен функцией:
Что значит быть ограниченным функцией? Область действия функции означает, что переменные var могут быть объявлены и доступны в любом месте функции.
function hello () { var j = 3; if (j == 3) { var n = 3; } console.log("n: ", n); // this will log: "n: 3" }; hello();
function hello () { var n = 5; console.log("n: ", n); // this will result in 5 if (3 == 3) { console.log("n: ", n) // this will also result in 5 }; }; hello();
Но у нас есть проблема с var, он позволяет повторно объявлять переменные внутри своей области видимости.
function hello () { var n = 5; console.log("n: ", n); // this will result in 5 if (3 == 3) { var n = 3; console.log("n: ", n); // this will also result in 3 }; console.log("n: ", n); // this will result in 3 }; hello();
Как вы можете видеть в приведенном выше примере, переменная n переобъявлена в «if-блоке», и ее значение изменилось вне блока, в результате чего:
Лакомый кусочек: в 2015 году был представлен ES6 (EcmaScript 6: EcmaScript — стандарт, на котором реализован JavaScript. Подробнее об этом здесь.) и на сцену вышли ключевые слова let и const.
2. Let имеет блочную область действия:
Будучи блочной, это означает, что переменные, объявленные с помощью let, доступны только внутри блока. Блок определяется фигурными скобками {} скобки. Это может быть блок if, for, while, do-while и т. д.
function hello () { var n = 5; console.log("n: ", n); // this will result in 5 if (3 == 3) { let n = 3; console.log("n: ", n); // this will also result in 3 }; console.log("n: ", n); // this will result in 5 }; hello();
Как видно из журналов, переменная, объявленная с тем же именем «n» в блоке if, отличается от переменной вне блока и содержит другое значение.
Еще один важный момент, связанный с let, заключается в том, что мы не можем повторно объявлять переменные, объявленные с помощью let, в том же блоке. Следующий код приведет к синтаксической ошибке.
function hello () { var n = 5; console.log("n: ", n); if (3 == 3) { let n = 3; console.log("n: ", n); let n = 4; // SyntaxError: Identifier 'n' has already been declared }; }; hello();
Постоянное ключевое слово:
Объем:
Что касается области действия, ключевое слово «const» имеет ту же область действия, что и let, т. е. имеет блочную область действия.
Использовать:
Основное отличие const от var и let заключается в том, что переменные, определенные с ним, являются константами. Звучит парадоксально, правда? Вот почему мы называем их просто константами. Вы не можете повторно присвоить какие-либо значения константам, в отличие от переменных, значения которых могут варьироваться, как видно из их имени. Повторное присвоение приведет к ошибке типа.
function hello () { const n = 3; n = 4; }; hello();
Подъем:
Подъем — одна из важных концепций, которую следует изучить, когда мы обсуждаем область видимости переменных. Всякий раз, когда мы определяем переменную с var в функции, она поднимается на вершину функции. Это означает, что переменная была объявлена сверху. Большинство других языков программирования не позволяют поднимать переменные, нужно сначала объявить переменную, прежде чем использовать ее. Например:
function hello () { n = 5; console.log("n: ", n); // this will result in 5 var n = 3; }; hello();
Здесь примечательным моментом является то, что «n» не приведет к 5, потому что поднимается только объявление, а не инициализация. В console.log без какой-либо предварительной инициализации его значение будет неопределенным.
function hello () { console.log("n: ", n); var n = 3; }; hello();
Переменные/константы, определенные с помощью let и const, не поддерживают подъем.
Эти примеры приведут к ошибкам ссылок.
function hello () { console.log("n: ", n); let n = 3; }; hello(); function hello () { console.log("n: ", n); const n = 3; }; hello();
Спасибо, что прочитали его до сих пор, пожалуйста, поделитесь своим ценным отзывом. Это поможет мне улучшить эти статьи.