Новое в ES6: let и const
До выхода ES6 в 2015 основным способом объявить переменную в JavaScript был var. С принятием стандарта ES6 у нас теперь есть - let, const, var. Давайте попробуем разобраться где и почему использовать то или другое при написании кода на JavaScript.
var #
Объявление переменной:
var variableName;
Переменной объявленной при помощи var
может быть присвоено новое значение или она может быть заново объявлена в рамках той области видимости (Scope) в которой находится.
Область видимости: глобальная и локальная. Переменная может быть объявлена вне функций и будет доступна из любой части JS-кода (глобально), или может быть объявлена внутри функции и будет доступна только в ней.
Пояснительные примеры:
// Повторное объявление переменной не вызывает ошибки
// Хотя смысла в этом и не много.
var name = 'Nikolay';
var name = 'Vasya';
let #
Объявление переменной:
let firstName;
Как и var
переменной объявленной таким образом можно присвоить значение, но объявление заново подобной переменной в той же области видимости приведет к ошибке.
Область видимости: блок. Проще говоря переменная видна в рамках блока кода ограниченного скобками.
Пояснительный пример для var
и let
:
// Блочная область видимости для let
function checkScopeBlock() {
for (let i = 1; i < 3; i++) {
console.log("Block scope ", i);
}
console.log(i);
// Получим ошибку т.к. переменная за пределами блока где была объвлена
}
checkScopeBlock();
// локальная область видимости (внутри функции) для var:
function checkScopeLocal() {
for (var i = 1; i < 3; i++) {
console.log("Local scope ", i);
}
console.log(i);
// i=3 значение получено т.к. переменная видна внутри всей функции, благодаря hoisting
}
checkScopeLocal();
Как видно из примера переменная с var
доступна даже за пределами цикла, т.к. имеет видимость в рамках всей функции. В то время как переменная с let
доступна только внутри блока цикла, поэтому в этом примере уместнее использовать let
для объявления переменной счетчика.
const #
Объявление переменной:
const PI = 22/7;
Переменные с const
и объявляются и присваиваются сразу. В ES6 это особый вид переменных которые именуются константами. Константы не могут быть объявлены заново или им не может быть присвоено новое значение, возникнет ошибка.
// Попробуем присвоить значение
const firstName = "Luciana";
firstName = "Mercy"; // Произойдет ошибка
console.log(firstName);
// Попробуем заново объявить
const lastName = "Luciana";
const lastName = "Mercy"; //Вызовет ошибку: lastName has already been declared
console.log(lastName);
Константы используются для объявления переменных "только для чтения" т.к. их значения не меняются по мере исполнения кода.
Область видимости: блок. Также как и у let .