---
title: Функции
seo:
  title: Функции — React Developer
  description: Тема «Функции» для собеседования React Developer. Что такое функциональное программирование и какие особенности JS позволяют говорить о нем как о функциональном языке программирования?
---

[Все темы React Developer](/react-developer)

## <strong>Что такое функциональное программирование и какие особенности JS позволяют говорить о нем как о функциональном языке программирования?</strong> [#q-14bee738d69b81239936f42bbe70971a]

<strong>Функциональное программирование</strong> — это парадигма
программирования, основанная на использовании функций как основных строительных
блоков.

#### Особенности функционального программирования&#58;

{/* prettier-ignore */}
1. <strong>Чистые функции</strong>&#58;

    - Функции, которые не имеют побочных эффектов и возвращают одинаковый результат для одинаковых аргументов.

1. <strong>Функции высшего порядка</strong>&#58;

    - Функции, которые могут принимать другие функции в качестве аргументов и/или возвращать их.

1. <strong>Неизменяемость</strong>&#58;

    - Состояние объектов не изменяется после их создания; вместо этого создаются новые объекты.

1. <strong>Функциональные композиции</strong>&#58;

    - Создание новых функций путем комбинирования других функций.

#### Особенности JavaScript как функционального языка&#58;

{/* prettier-ignore */}
1. <strong>Поддержка функций высшего порядка</strong>&#58;

    - Пример&#58;

        ```javascript
        function map(arr, func) {
            return arr.map(func);
        }
        ```

1. <strong>Анонимные функции и функции-стрелки</strong>&#58;

    - Пример&#58;

        ```javascript
        const add = (a, b) => a + b;
        ```

1. <strong>Методы массива для функционального программирования</strong>&#58;

    - Пример&#58;

        ```javascript
        const numbers = [1, 2, 3, 4];
        const doubled = numbers.map(n => n * 2);
        ```

1. <strong>Замыкания</strong>&#58;

    - Пример&#58;

        ```javascript
        function createCounter() {
            let count = 0;
            return function() {
                return ++count;
            };
        }
        ```

:::note[Ссылки для изучения]

1. [Функции в JavaScript](https://learn.javascript.ru/function-basics)
   :::

---

## <strong>Что такое функции высшего порядка (</strong><code>Higher Order Functions</code><strong>)?</strong> [#q-14bee738d69b814c822efa581c33db2a]

<strong>Функции высшего порядка</strong> — это функции, которые могут принимать
другие функции в качестве аргументов и/или возвращать функции в качестве
результата.

#### Основные характеристики&#58;

{/* prettier-ignore */}
1. <strong>Принимают функции в качестве аргументов</strong>&#58;

    - Пример&#58;

        ```javascript
        function map(array, func) {
            let result = [];
            for (let i = 0; i < array.length; i++) {
                result.push(func(array[i]));
            }
            return result;
        }

        let numbers = [1, 2, 3, 4];
        let doubled = map(numbers, function(n) { return n * 2; });
        console.log(doubled); // [2, 4, 6, 8]
        ```

1. <strong>Возвращают функции в качестве результата</strong>&#58;

    - Пример&#58;

        ```javascript
        function createMultiplier(multiplier) {
            return function(x) {
                return x * multiplier;
            };
        }

        let double = createMultiplier(2);
        console.log(double(5)); // 10
        ```

1. <strong>Композиция функций</strong>&#58;

    - Создание новой функции путем объединения других функций.

    - Пример&#58;

        ```javascript
        function compose(f, g) {
            return function(x) {
                return f(g(x));
            };
        }

        let addOne = x => x + 1;
        let square = x => x * x;

        let addOneThenSquare = compose(square, addOne);
        console.log(addOneThenSquare(2)); // 9
        ```

Функции высшего порядка — это мощный инструмент в функциональном программировании, позволяющий создавать более гибкие и абстрактные решения за счет работы с функциями как с данными.

:::note[Ссылки для изучения]

1. [Функции в JavaScript](https://learn.javascript.ru/function-basics)
   :::

---

## <strong>Почему функции в JS называют объектами первого класса (</strong><code>First&#45;class Objects</code><strong>)?</strong> [#q-14bee738d69b813598f6daa655935f71]

<strong>Функции в JavaScript</strong> называются объектами первого класса,
потому что они обладают всеми свойствами объектов и могут быть использованы как
данные.

#### Основные характеристики&#58;

{/* prettier-ignore */}
1. <strong>Присваивание переменным</strong>&#58;

    - Функции могут быть присвоены переменным.

    - Пример&#58;

        ```javascript
        const greet = function() {
            console.log("Hello");
        };
        ```

1. <strong>Передача в качестве аргументов</strong>&#58;

    - Функции могут быть переданы как аргументы другим функциям.

    - Пример&#58;

        ```javascript
        function callFunction(fn) {
            fn();
        }

        callFunction(greet); // Выведет "Hello"
        ```

1. <strong>Возврат из других функций</strong>&#58;

    - Функции могут быть возвращены из других функций.

    - Пример&#58;

        ```javascript
        function createFunction() {
            return function() {
                console.log("Hello from returned function");
            };
        }

        const newFunction = createFunction();
        newFunction(); // Выведет "Hello from returned function"
        ```

1. <strong>Сохранение в структурах данных</strong>&#58;

    - Функции могут быть сохранены в массивах и объектах.

    - Пример&#58;

        ```javascript
        const functions = [greet, createFunction()];
        functions[0](); // Выведет "Hello"
        ```

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

:::note[Ссылки для изучения]

1. [Функции в JavaScript](https://learn.javascript.ru/function-basics)
   :::
