Перейти к содержимому
На этой странице

Функции

Все темы React Developer

Что такое функциональное программирование и какие особенности JS позволяют говорить о нем как о функциональном языке программирования?

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

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

  1. Чистые функции:

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

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

    • Состояние объектов не изменяется после их создания; вместо этого создаются новые объекты.
  4. Функциональные композиции:

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

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

  1. Поддержка функций высшего порядка:

    • Пример:

      function map(arr, func) {
          return arr.map(func);
      }
  2. Анонимные функции и функции-стрелки:

    • Пример:

      const add = (a, b) => a + b;
  3. Методы массива для функционального программирования:

    • Пример:

      const numbers = [1, 2, 3, 4];
      const doubled = numbers.map(n => n * 2);
  4. Замыкания:

    • Пример:

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

Что такое функции высшего порядка (Higher Order Functions)?

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

Основные характеристики:

  1. Принимают функции в качестве аргументов:

    • Пример:

      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]
  2. Возвращают функции в качестве результата:

    • Пример:

      function createMultiplier(multiplier) {
          return function(x) {
              return x * multiplier;
          };
      }
      
      let double = createMultiplier(2);
      console.log(double(5)); // 10
  3. Композиция функций:

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

    • Пример:

      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

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


Почему функции в JS называют объектами первого класса (First-class Objects)?

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

Основные характеристики:

  1. Присваивание переменным:

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

    • Пример:

      const greet = function() {
          console.log("Hello");
      };
  2. Передача в качестве аргументов:

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

    • Пример:

      function callFunction(fn) {
          fn();
      }
      
      callFunction(greet); // Выведет "Hello"
  3. Возврат из других функций:

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

    • Пример:

      function createFunction() {
          return function() {
              console.log("Hello from returned function");
          };
      }
      
      const newFunction = createFunction();
      newFunction(); // Выведет "Hello from returned function"
  4. Сохранение в структурах данных:

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

    • Пример:

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

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

Собеседования: React

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: React-разработчик, Frontend-разработчик. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.