Что такое Var
?
Когда-то var
было единственным ключевым словом для объявления переменных. var
переменные ограничены функцией. Если он не объявлен внутри функции, он становится глобальным. var
переменные также могут быть переобъявлены. Значение будет установлено на последнее объявление. Давайте посмотрим на пример кода:
var varVariable = 'This is a Var variable' console.log(varVariable) //This is a Var variable const varFunction = () => { console.log(varVariable) //This is a Var variable } varFunction() var varVariable = "This is same Var reassigned" console.log(varVariable) //This is same Var reassigned varVariable = "This is same Var without var keyword" console.log(varVariable) //This is same Var without var keyword
Недостатком использования var является то, что он открывает сценарии, в которых вы можете неосознанно использовать одно и то же имя переменной, что приводит к неожиданным результатам.
Что такое Пусть?
let
— это улучшение объявления var
. let
имеет заблокированную область действия, что означает, что он будет ограничен {}. Другими словами, переменная будет доступна только внутри блока {}. let
переменные также могут быть объявлены в глобальной области видимости. Давайте посмотрим на пример кода:
const firstFunction = () => { let letVariable = "This is a Let variable"; console.log(letVariable); //This is a Let variable }; firstFunction(); const secondFunction = () => { console.log(letVariable); //ReferenceError letVariable is not defined }; secondFunction();
secondFunction
приведет к ошибке ссылки, потому что letVariable
не объявлено в функциональных скобках {}.
Также важно отметить, что let
нельзя повторно объявить. Следующий код приведет к ошибке:
let letVariable = "This is a Let variable" let letVariable = "This is a Let variable again"
Что такое Конст?
const
почти точно такое же, как let
. Одно ключевое отличие состоит в том, что const
нельзя присвоить другое значение.
let letVariable = "This is a let variable"; console.log(letVariable); //This is a let variable letVariable = "Change to let variable"; console.log(letVariable); //Change to let variable const constVariable = "This is a const variable"; console.log(constVariable); //This is a const variable constVariable = "Change to const variable"; console.log(constVariable); //TypeError: Assignment to constant variable.
Однако, если const
является объектом, свойства внутри могут быть изменены. Но его нельзя переназначить другому объекту. Давайте посмотрим на пример:
const person = { name: "Jon", age: 100 }; console.log(person); //{ name: 'Jon', age: 100 } person.age = 1; console.log(person); //{ name: 'Jon', age: 1 } // Try to assign person to a new object. person = { name: "Joanne", age: 50 }; console.log(person); //TypeError: Assignment to constant variable.
Подъем
Еще одна важная вещь, которую следует учитывать, — это то, как эти типы переменных поднимаются. Поднятие — это концепция, при которой (во время компиляции) объявления переменных и функций перемещаются в верхнюю часть содержащих областей. В то время как var
, let
и const
поднимаются наверх, только var
инициализируется undefined
. Это означает, что вы можете получить доступ к var
до его объявления, но вы не можете получить доступ к let
, const
переменным до объявления. Давайте посмотрим на пример:
console.log(varVariable); //undefined var varVariable = "This is a var variable" console.log(varVariable); //This is a var variable console.log(letVariable); //ReferenceError: Cannot access 'letVariable' before initialization let letVariable = "This is a let variable" console.log(letVariable); //This is a var variable
Смущен, почему первый console.log(varVariable)
не определен? Вот что делает подъем.
Этот:
console.log(varVariable); //undefined var varVariable = "This is a var variable"
Интерпретируется так:
var varVariable; //initialized to undefined console.log(varVariable); //undefined varVariable = "This is a var variable"
И это:
console.log(letVariable); let letVariable = "This is a let variable"
Интерпретируется так:
let letVariable; //not initialized to anything console.log(letVariable); //ReferenceError: Cannot access 'letVariable' before initialization letVariable = "This is a let variable"