Для хранения данных в программе в TypeScript, как и во многих языках программирования используются переменные.
Для определения переменных, как в JavaScript, можно использовать ключевое слово var:
var z; // переменная z
Другой способ определения переменной применяет ключевое слово let, которое было добавлено в JavaScript в стандарте ES 2015:
let z;
Применение let
является более предпочтительным, поскольку позволяет избежать ряд проблем, связанных с объявлением переменных. В частности, с помощью var
мы можем определить два и более раз переменную с одним и тем же именем:
var x = "hello"; console.log(x); var x = "work"; console.log(x);
Если программа большая, то мы можем не уследить за тем, что такая переменная уже объявлена, что является источником потенциальных ошибок. Подобную проблему позволяет решить let:
let x = "hello"; console.log(x); let x = "work"; // здесь будет ошибка, так как переменная x уже объявлена console.log(x);
То же самое относится, если переменная с одним и тем же именем определяется два раза, но с помощью обоих ключевых слов - let
и var
:
let x = "hello"; console.log(x); var x = "work"; // здесь будет ошибка, так как переменная x уже объявлена console.log(x);
Определив переменную, мы можем установить ее значение и в процессе работы программы поменять его на другое:
let z = 6; z = 8;
Кроме переменных в TypeScript имеются константы - для них можно установить значение только один раз. И далее процессе работы программы мы уже не сможем изменить это значение. Для определение констант используется ключевое слово const:
const z = 6; z = 8; // здесь ошибка - нельзя изменить значение константы z
Выше было сказано, что нельзя определить с помощью let
определить более одного раза переменную (а с помощью const
- константу)
с одним и тем же именем. Данное утверждение относится к ситуации, когда переменные let и константы определяются в одной области видимости. Есть локальная область видимости, которая опреляется блоком
кода, ограниченным фигурными скобками { //....код }. И есть глобальная область видимости - вне какого-либо блока кода.
Переменные и константы во вложенной области видимости могут скрывать переменные и константы с тем же именем, определенные во внешней области видимости. Например:
let x = 10; { let x = 25; console.log(x); // 25 } console.log(x); // 10
Здесь определены две переменных с одним и тем же именем. Но ошибки нет, поскольку они определены в разных областях видимости.
Переменная let x = 10
определена в глобальной области видимости. А переменная let x = 25;
определена во вложенном блоке кода -
в локальной области видимости. И она скрывает внешнюю глобальную переменную. Поэтому консоль браузера выведет нам следующее:
25 10
То же самое относится к случаю, если переменные определяются в локальных областях видимости, которые вложены одна в другую:
let x = 10; { let x = 25; { let x = 163; console.log(x); // 163 } console.log(x); // 25 } console.log(x); // 10
Можно следующим образом суммировать различия между var и let/const:
var | let/const |
Может быть доступна вне области видимости, в которой она определена. { var x = 94; } console.log(x); // норм | Доступна только в рамках области видимости, в котором она определена { let x = 94; } console.log(x); // ! Ошибка |
Можно использовать в функции перед определением. console.log(x); // undefined, но норм var x = 76; | Можно использовать только после определения. console.log(x); // ! Ошибка let x = 76; |
В одной и той же области видимости можно несколько раз определить переменную с одним и тем же именем. var x = 72; console.log(x); // 72 var x = 24; // норм console.log(x); // 24 | В одной и той же области видимости можно только один раз определить переменную с одним и тем же именем. let x = 72; console.log(x); // 72 let x = 24; // ! Ошибка console.log(x); |