Я подписался на курс по основам JS, организованный Флавио Копесом. Каждый день Флавио рассылает участникам электронные письма с парой вопросов/задач. Всего должно быть 35 писем. Отвечать на них не обязательно, но ответы на вопросы являются важной частью курса. Поэтому я решил поделиться своими ответами с миром: в лучшем случае это может помочь кому угодно, кроме меня, в худшем — только мне.

Расскажите, что такое значение, тип и переменная. И различия между этими тремя понятиями

значение – это часть данных, которая хранится в памяти компьютера.

Значения могут быть разных видов: символы, цифры, структуры данных. Типы значений называются типами.

переменная — это своего рода указатель на память, где хранится конкретное значение. С лексической точки зрения, переменные — это идентификаторы литералов/значений.

Итак, разница примерно следующая. Мы можем обращаться с переменной как с контейнером (технически нет, это указатель), со значением как с содержимым контейнера и, наконец, с типом как с заголовком контейнера.

Что означает, что JavaScript имеет свободную типизацию?

JavaScript определяет типы переменных на основе их значений. Именно поэтому переменные могут менять свой тип на ходу, прямо во время выполнения программы.

В чем разница между объявлениями переменных let, const и var?

Var – это старый способ объявления, основанный на концепции глобальной и локальной области видимости. Var позволяет не присваивать значения переменным, объявлять одну переменную более одного раза с разными значениями. Самый интересный нюанс (и опасный) — если строгий режим не включен и разработчик забывает использовать var в блоке/функции, интерпретатор JavaScript автоматически объявит глобальную переменную.

Let и const имеют блочную область видимости, поэтому их объявления зависят от того, где в коде находится переменная. Const также предотвращает изменение значений переменных, но не обеспечивает неизменяемость. Если объект объявлен с const, вы все равно можете изменить содержимое объекта (методы и другие пары ключ-значение).