Когда дело доходит до объявления переменных с помощью JavasScript, есть три основных варианта: «var», «let» и «const». Каждое из этих объявлений переменных несет в себе различную область видимости, использование и подъем. Вопросы «В чем разница между var и let?» Или «В чем разница между let и const?» Часто задают, чтобы оценить свои знания фундаментального JavaScript. Таким образом, необходимо полностью понимать эти термины и их различия. Я начну с описания области видимости и подъема, поскольку это ключевые принципы объявления этих переменных.

Объем

Область действия можно определить как значение, определяющее доступность переменных. Переменные, определенные внутри функции, имеют так называемую «локальную» область видимости и доступны только внутри этой функции (между фигурными скобками {}). Известно, что переменная, определенная вне функции, имеет «глобальную» область видимости. При объявлении переменной вне функции на глобальном уровне все функции и скрипты в вашем файле JavaScript могут получить к ней доступ.

LOCAL
function myFunction() {
  let food = pizza;
  // the food variable is accessible within this function
}
// outside of the function, 'food' will not be accessible
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GLOBAL
let food = donuts;
// here, the 'food' variable is declared outside of the function
function mySecondFunction() {
  food = sushi;
  // as 'food' was declared globally in this case, it can be     accessed from within the function
}

Подъем

Подъем - это стандартное поведение JavaScript, заключающееся в перемещении всех объявлений в верхнюю часть текущей области видимости, при этом «поднимая» их.

console.log(city);
var city = "New York City";
// Output: Undefined

Проблема с подъемом заключается в том, что поднимаются только объявления переменных, а не фактические присвоенные значения. Ваш сценарий распознает, что переменная существует, но не будет иметь для нее значения. Это может привести к некоторым надоедливым, а иногда и трудно исправляемым ошибкам в вашем коде. Вы можете увидеть, что значение не определено, и ожидаете другого типа ошибки, или наоборот, в результате подъема. (Если вместо этого переменная была объявлена ​​с помощью «let», вы получите ошибку «ReferenceError», а не «undefined», что было бы гораздо более удобоваримым сообщением об ошибке, которое будет обсуждаться в разделе «let»)

var, let, const

После понимания концепций области видимости и подъема будет намного легче различать типы объявлений переменных.

‘Var’: самое старое из этих объявлений - ‘var’. До ES6 единственным способом объявления переменных была var. Переменные, объявленные с помощью ключевого слова var, могут быть изменены или переназначены значения, и к ним можно получить доступ в областях, отличных от той, которая была им назначена. При этом "var" уникальным образом поднимается таким образом, вызывая описанные выше ошибки при подъеме.

«Let»: объявление, которое ближе всего к старому «var», - «let». Переменные, объявленные с помощью 'let', также могут быть переназначены, ключевое отличие состоит в том, что переменные, объявленные с помощью 'let', имеют область видимости блока, например, к ним можно получить доступ только внутри блока кода (между {} s) и внутренним блоков, что было заявлено. Переменные, объявленные с помощью 'let', имеют строго локальную, блочную область видимости и предотвращают проблемы подъема, которые могут возникнуть при использовании 'var'.

let dog = "Spot";
dog = "Fido";
console.log(dog) // "Fido"

‘Const’: последний тип объявления переменной - ‘const’. Этот тип объявления имеет много общего с let, с той лишь разницей, что после того, как переменной присваивается значение с помощью «const», это значение нельзя переназначить. Этот тип объявления лучше всего использовать в случаях, когда значение никогда не следует переназначать или оно остается неизменным во всем приложении. (Один из способов решения этой проблемы заключается в том, что для объектов, объявленных с помощью «const», могут быть обновлены их свойства)

const city = "New York City"
city = "San Francisco" // error : Assignment to constant variable.

В заключение, лучше всего придерживаться новых объявлений «let» и «const», в зависимости от приложения, чтобы избежать проблем с подъемом и внутренних проблем, связанных с глобально доступной переменной. Если помнить о области видимости, использование let и const - идеальный способ объявления переменных.