# Стрелочные функции

[![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)

![](https://3367117456-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8VRUyYIp5X-d6oGwV2%2F-M8Vx61HGRGBJXt2TpP_%2F-M8VxOQSRA52yufTjacF%2Fimg-19.png?alt=media\&token=f17dd6b8-f14d-4b6a-8880-cf6972cc6ef2)

Данный тип функций пришел из **`стандарта ES6`** и завоевал сердца всех проггеров. А все потому, что зачастую они намного облегчают жизнь,  отчасти они более простые и их запись занимает меньше строчек кода.

#### **Синтаксис** <a href="#toc_1" id="toc_1"></a>

Сразу же начну с синтаксиса:

```javascript
let func = () => alert('Я стрелочная функция!');

func(); 
```

Сразу же приведу код для сравнения с обычной функцией:

```javascript
function func() {
    alert('Я стрелочная функция');
}
```

Две функции, которые выполняют абсолютно одинаковые действия.

В случае со **стрелочной функцией** ты уже не используешь ключевого слова `function`. И как, видишь, функцию ты записываешь в переменную `func`, которую потом вызываешь.

В `func` ты записываешь следующую конструкцию `() => alert(...)`. Эта конструкция самая простая, когда тебе нужно выполнить только **одно действие**. Если же нужно выполнить **несколько действий**, то здесь ты обязан добавить фигурные скобки `{}` и после них поставить символ `;`. Пример:

```javascript
let func = () => {
    alert('Я стрелочная функция');
    alert('Честно');
};
```

#### **Аргументы функции** <a href="#toc_2" id="toc_2"></a>

Если функция должна принимать аргументы, то здесь тоже всё просто. По аналогии с обычными функциями ты можешь указать аргументы в скобках при определении функции и передавать их туда при вызове.

```javascript
let func = (a) => {
    alert(a);
}; 

func(3); // выдаст в alert значение 3
```

#### **Возвращение значения в стрелочных функциях** <a href="#toc_3" id="toc_3"></a>

Так же **стрелочные функции** позволяют не писать ключевое слово `return`, если функция что-то должна вернуть. Но работает это только в том случае, если выполняется одно действие.

```javascript
let func = () => 1 + 1;

let func2 = () => {
    return 1 + 1;
};
```

Функции `func` и `func2` – полностью идентичны, поэтому зачем писать `return` и добавлять фигурные скобки, если можно обойтись и без них.

Если в функции нужно выполнить несколько действий и вернуть результат, то здесь уже в любом случае нужно добавлять фигурные скобки и ключевое слово `return`.

```javascript
let func = () => {
  let result = 2 + 2;

  return result;
}; 
```

#### **Домашнее задание** <a href="#toc_4" id="toc_4"></a>

Напиши **стрелочную функцию**, которая будет запрашивать с помощью `prompt` два числа у пользователя и `перемножать` их между собой. Полученное значение функция должна возвращать с помощью ключевого слова `return`. Результат выполнения функции сохрани в `переменную`.
