Это один из наиболее часто задаваемых вопросов рекрутерами или младшими разработчиками, поэтому не так уж сложно выделить его и знать, когда его использовать. const и let — это функции, которые стали доступны в ES2015 (ES6) и в то время вызывали много сомнений. Я надеюсь, что эта статья поможет тем, у кого возник тот же вопрос, что и у меня некоторое время назад. Готовый? Давайте выделим разницу между ними с точки зрения того, когда их использовать и их область применения.

Вар

В прошлом объявление переменных с использованием var было «обязательным», и в результате с этим объявлением были связаны некоторые проблемы. Со временем было принято решение ввести ES6 (ECMAScript 2015) с исправлениями некоторых проблем, возникших при использовании var.

Объем переменной

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

пример

var Germany = "Global Variable"; // Germany is in the global scope and can be accessed inside a child function.

function Example() {
    var Mozambique = "Local Scope"; // Mozambique is in a local scope and cannot be accessed outside the Example function.
}

console.log(Mozambique); // Mozambique will return an error because the variable Mozambique can only be accessed within the scope where it was declared or in a child scope if the variable is declared globally.

Оператор console.log(Mozambique) действительно приведет к ошибке, поскольку переменная Mozambique определена в локальной области видимости функции Example и не может быть доступна за пределами этой функции.

var Germany = "Global Variable"; // Germany is in the global scope and can be accessed inside a child function.

function Example() {
    var Mozambique = "Local Scope"; // Mozambique is in a local scope and cannot be accessed outside the Example function.
}

console.log(Germany); // This will print "Global Variable" since Germany is a global variable and can be accessed from anywhere in the code.

В этом примере переменная Germany объявлена ​​в глобальной области видимости, поэтому к ней можно получить доступ как из основного кода, так и из любых дочерних функций. Однако переменная Mozambique объявлена ​​внутри функции Example, что делает ее локальной для этой функции, и доступ к ней вне ее невозможен. Таким образом, попытка записать Mozambique вне функции Example приведет к ошибке, указывающей, что переменная не определена.

Обновите переменную

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

пример

var Mozambique = "Beira";
var Mozambique = "Maputo";
var Mozambique = "Beira";
Mozambique = "Maputo";

Вар поднимается

В JavaScript есть механизм, который перемещает объявления функций и переменных в начало кода перед выполнением.

{
    console.log(Mozambique); // Undefined

    var Mozambique = "Beira";
}

console.log(Mozambique); // Beira

В этом примере переменная Mozambique объявлена ​​внутри блока, ограниченного фигурными скобками {}. Перед выполнением кода из-за подъема объявление переменной Mozambique перемещается в начало области видимости, но остается неинициализированным, поэтому оно инициализируется значением 'undefined'.

Внутри первого console.log доступ к переменной осуществляется до получения значения «Beira», поэтому отображается «Undefined».

Затем переменной Mozambique присваивается значение «Бейра» внутри блока.

Наконец, console.log вне блока печатает «Beira», потому что теперь переменная Mozambique содержит значение «Beira» после инициализации во внутренней области.

Позволять

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

Объем аренды

A declaração let utiliza o escopo de blocos {}, o que significa que toda declaração let feita dentro de um bloco estará disponível somente dentro desse bloco.

function provinces() {
    let Message = "Very Good";
    console.log(Message); // Very Good.
}
console.log(Message); // Undefined.

Обновите разрешение

Переменная let может быть обновлена ​​в пределах ее области, но не может быть повторно объявлена ​​в той же области. Это означает, что переменную с одним и тем же именем нельзя объявить дважды, но ее можно обновить в дочерней области видимости, если переменная уже инициализирована.

let Mozambique = "Beira";
let Mozambique = "Maputo"; // error: the variable Moçambique has already been declared.

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

let Mozambique = "Beira";
Mozambique = "Maputo";

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

Если мы намерены снова объявить ту же переменную, это возможно только в разных областях видимости.

let Mozambique = "Beira";

function Exemplo() {
    let Mozambique = "Maputo";
    console.log(Mozambique); // Maputo
}

console.log(Mozambique); // Beira

Это происходит потому, что переменные находятся в разных областях.

пусть горит

let имеет несколько других явлений, чем `var` . Let также инициализируется в верхней части области видимости, но в отличие от «не определено» var, let возвращает ссылку на ошибку.

console.log(Mozambique);
let Mozambique = "Beira";
 // reference error

В этом случаеletне поднимает оператор наверх.

Постоянная

Переменные, объявленные с помощью const, имеют неизменяемые значения.

Постоянная область

Кроме того, как и let, объявления const доступны только в том блоке, где они были объявлены.

const Mozambique = "Beira";

function provinces() {
    const Message = "Very Good.";
    console.log(Message); Very Good.
}

console.log(Message); // Undefined.

Обновить константу

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

const Mozambique = "Beira";
Mozambique = "Maputo"; // error: assignment to a constant variable.

Также не допускаются:

const Mozambique = "Beira";
const Mozambique = "Maputo"; // error: Mozambique identifier already declared.

Объявление const должно быть инициализировано во время объявления.

Но когда мы объявляем объект с константой, мы можем обновить свойства внутри объекта.

const Mozambique = {
    provinces: 12,
};

Мы не можем:

Mozambique = {
    provinces: 10,
}; // error: assignment to a constant variable.

Мы можем:

Mozambique.provincias = 12;

Постоянный подъем

Константа также перемещается наверх, но не инициализируется.

console.log(Mozambique); // reference error
const Mozambique = "Beira";

Резюме

  • var declarations используют глобальную и функциональную область, в то время как let и const используют блочную область.
  • let и var могут быть объявлены даже без инициализации, в отличие от const, который нужно инициализировать в объявлении.
  • Все они проходят процесс подъема, но var инициализируется с помощью «undefined», а let и const не инициализируются.
  • var можно объявлять более одного раза и обновлять его значения в одной и той же области видимости. let может обновлять значения, но не повторно объявлять, а const нельзя обновлять или повторно объявлять в той же области.