# Переменные в JavaScript

[![Generic badge](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)

![](/files/-M8V_QFayMk_VuEr2TRU)

Начну с примера: представь, нам нужно сделать простое математическое действие – число `165` `умножить (*)` на `734`. Затем полученное произведение нужно `умножить (*)` на `3`, затем `поделить (/)` на `5`, и каждое полученное значение в результате этих действий нам нужно вывести пользователю.

**Самый простой вариант решения задачи**:

```javascript
console.log(165 * 734); 
console.log(165 * 734 * 3); 
console.log((165 * 734) / 5);
```

Фактически, мы сделали то, что требовалось по заданию. Тебя не смущает, что каждый раз мы повторяем одно и то же действие в каждом выражении? Если, не заметил, то мы каждый раз заставляем компьютер вычислять произведение `2-ух чисел`. Твоему компуктеру это, конечно же, раз плюнуть, но представь, если там будет другое повторяющееся действие, которое уже будет занимать не `0.000000000000000001 миллисекунды` на выполнение, а `3 сек`?

Получится, что выполнение программы будет достаточно долгим процессом. Как же это можно оптимизировать? Как раз в этом нам на помощь приходят **переменные**.

Что же такое переменная? **Переменная** – *это выделенная именованная область в памяти для хранения каких-либо данных*.

Что это значит? А то, что мы можем создать переменную и записать в нее какое-либо значение, это может быть в виде примитивного значения, в виде строки (`string`), числа (`number`), булева значения (`boolean -> true/false`) или значения, полученного в результате вычисления какого-либо выражения.

**Переменная** – *это подписанная маркером коробка, в которую можно что-то положить, а затем при необходимости взять из нее то, что положил в неё ранее*. А если нужно, то даже можно поменять содержимое этой коробки или вообще оставить ее пустой.

![В переменную с именем Name мы записываем значение Maria](/files/-M8V_cZyj1zFYjQdtyNi)

\
Пробуем оптимизировать наш код. Получим следующее:

```javascript
let productNumbers = 165 * 734;
console.log(productNumbers * 3); 
console.log(productNumbers / 5);
```

Как видишь, мы создали переменную с именем `productNumbers` и записали в нее значение произведения. Далее, мы `productNumbers` умножаем на `3`, а следующим действием делим на `5`.

Вся прелесть заключается в том, что значение переменной будет рассчитываться только 1 раз. Т.е., фактически, значением переменной является не само произведение, а результат произведения, т.е.: `121110`. Затем, мы можем обратиться к этой переменной в любой части кода.

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

Наверное, у тебя возник вопрос, а что это за  `let` перед именем переменной? Это ***объявление переменной***. Вообще, **в JavaScript есть 3 способа объявления переменной**:

```javascript
let productNumbers = 165 * 734;
var productNumbers = 165 * 734;
const productNumbers = 165 * 734;
```

Как видишь, их целых 3 брата акробата. Все они делают одно и то же – говорят твоему компуктеру: **разметь в памяти ячейку с именем** `productNumbers` и **сохрани в неё результат произведения** `165 * 734`.

Чувствую, ты уже задаешься вопросом: «зачем их целых 3 и отличаются ли они чем-то?» Да, различаются. Но об этом в следующем уроке.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://thedvlpr.gitbook.io/javascript-for-dummies/peremennye-v-javascript.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
