Известный нам язык JavaScript является надмножеством ECMAScrpt. Ядро JavaScript определено в ECMA-262, все типы данных, такие как переменные, функции, массив, объекты и т. Д., Определены в ECMA-262.
ECMAScript 6 был формализован в 2015 году и официально назывался «ECMAScript 2015». ECMAScript 6 включает очень широкие и совершенно новые объекты и шаблоны, изменения синтаксиса новых методов для существующих объектов. Основное внимание в ECMAScript 6 уделяется решению проблем, с которыми сталкивались разработчики.
В этом блоге я объясню разницу между объявлением переменных var, let и const.
Ключевое слово var
Объявление переменных с использованием ключевых слов var
является традиционным способом в JavaScript. Переменные, объявленные с помощью var
, называются поднятыми. В этом типе объявления vars
обрабатываются так, как если бы они были объявлены поверх функции; независимо от того, объявили ли вы, даже если в середине функции. Давайте разберемся с этим на следующем примере:
function getVars(condition) { if (condition) { var vars = "abc"; return vars; } else { // vars is available here but value of vars will be undefined return null; } console.log(vars); // vars will print out - 'abc', if condition is true }
Если вы C
или разработчик другого языка и новичок в JavaScript, вы можете подумать, что значение vars
будет создано только тогда, когда условие вернет true
. Но в JavaScript переменная vars
будет создана независимо от результата условия. Это связано с тем, что движок JavaScript изменяет функцию getVars
, чтобы она выглядела, как показано ниже:
function getVars(condition) { var vars; // vars will get hoisted on top of function if (condition) { vars = "abc"; return vars; } else { // vars is available here but value of vars will be undefined return null; } console.log(vars); // vars will print out - 'abc', if condition is true }
Как видно из приведенного выше кода, переменная vars
объявлена поверх функции, но ее инициализация происходит в том же месте, что и раньше. Таким образом, если условие возвращает false, переменная vars
по-прежнему доступна со значением undefined
.
Именно из-за такого поведения многие новые разработчики JavaScript могут неправильно понять подъем переменной и в конечном итоге столкнуться с ошибками. По этой причине в ECMAScript 6 было введено объявление уровня блока, чтобы сделать переменную более мощной, и были введены еще два типа данных, называемые let
и const
.
Ключевое слово let
Объявление ключевого слова let
такое же, как и ключевое слово var
. Вы можете просто заменить ключевое слово var
на let
, и все. Единственная разница в том, что let
ограничит область действия переменной только внутри уровня блока (не на уровне функции). Давайте разберемся в приведенном выше примере с помощью let:
function getVars(condition) { if (condition) { let vars = "abc"; return vars; } else { // vars is not accessible here return null; } console.log(vars); // vars will throw error regardless of the condition result. }
Объявление let
- это объявление уровня блока, поэтому после выхода функции из блока if (condition) { ... }
переменная vars
станет недоступной для функции. Вот почему он выдаст ошибку, когда вы попытаетесь вызвать его в console.log(vars);
. Итак, чтобы переменная, объявленная с помощью let
, была доступна через функцию, вам необходимо объявить ее поверх функции, как показано ниже:
function getVars(condition) { let vars; if (condition) { vars = "abc"; return vars; } else { // vars will be accessible here return null; } console.log(vars); // vars will print out - 'abc', if condition is true else it will print 'undefined'. }
Ключевое слово const
ECMAScript 6 также включает еще один способ объявления переменной с именем const
. Переменная, объявленная с использованием const
, будет постоянной на протяжении всей функции и не может быть изменена после объявления. Вот почему каждая const
переменная должна быть инициализирована в своем объявлении, как показано ниже:
const firstName = "Ashish"; // valid constant // throws error firstName = "Panchal"; // invalid constant const lastName; // it needs to be initialized as well
Аналогично объявлению let
Объявление const
также является объявлением уровня блока, это означает, что переменная, объявленная с помощью const
, не будет доступна за пределами области действия блока.
if (condition) { const vars = "abc"; } // throws error console.log(vars); // vars will not be accessible here
В приведенном выше коде vars
объявлен с const
, и после завершения выполнения условия if
переменная vars
не будет доступна за пределами блока.
Любая переменная, объявленная в коде с помощью var
или let
, не может использоваться для повторного объявления ее с помощью const
, см. Пример ниже:
var vars = "abc"; let num = 50; // both throws error const vars = "def"; const num = 100;
Я надеюсь, что приведенное выше описание типов данных var
, let
и const
поможет их лучше понять. В случае возникновения каких-либо вопросов или предложений, пожалуйста, дайте мне знать в поле для комментариев ниже.
Первоначально опубликовано на сайте ashishuideveloper.in 15 сентября 2018 г.