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

JavaScript обладает всеми теми способностями или функциями, которые требуются, чтобы быть языком с функциями первого класса, поэтому функции рассматриваются как граждане первого класса. Что ж, значение «граждане (объекты) первого класса» заключается в том, что в языке программирования данная сущность (функция) поддерживает все операционные свойства, присущие другим сущностям; такие свойства, как возможность присваиваться переменной, передаваться в качестве аргумента функции, возвращаться из функции... По сути, первоклассное гражданство просто означает «способность делать то, что могут делать все остальные». В результате говорят, что язык программирования имеет функции первого класса, когда функции в этом языке обрабатываются как любая другая переменная.

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

  • Возможность хранить функции в переменной
const summation = function (a,b) {
return a+b
}
summation(1,2) // 3
  • Возможность хранить функции в методе
const foo = {
 value: 1,
 summation: function(a,b) {
   return a+b+this.value
 }   
}
const sum = foo.summation(2,3)
console.log(sum) // 6
  • Возможность передавать функции в качестве аргумента другим функциям
function sayHello() {
  return "Hello ";
}
function sayHelloWorld(sayHello, param) {
  console.log(sayHello() + param);
}

sayHelloWorld(sayHello, "World!") // "Hello World"
  • Возможность возвращать функции из функций
function sayHelloWorld() {
  return () => {
    console.log("Hello World!");
  };
}

// First Approach
sayHelloWorld()() // "Hello World!"

// Second Approach
const greeting = sayHelloWorld()
greeting() // "Hello World!"
  • Способность функций вызывать себя
const fibonacci = (n) => (n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2));

console.log(fibonacci(10)) // 55
  • Возможность применять методы к функциям
function sayHelloWorld() {
  console.log(`${this.firstWord} ${this.secondWord}`);
}

const obj = {
  firstWord: "Hello",
  secondWord: "World!",
};

sayHelloWorld.call(obj) // "Hello World!"

Когда мы смотрим на вторую подтему «Функции высокого порядка», она может показаться сложной, но ее можно определить как простые многоуровневые функции. Другими словами, функции высокого порядка — это функции, которые могут возвращать функции в качестве выходных данных или принимать другие функции в качестве входных данных или выполнять и то, и другое. Поведение функций высокого порядка возможно только благодаря функциям первого класса. В JavaScript есть много встроенных функций высокого порядка, которые расширяют возможности использования языка, такие как методы reduce() , map() , filter() , а также метод addEventListener() можно классифицировать как функцию высокого порядка. .

  • пример уменьшения()
const arr = [1, 2, 3, 4];

const initialValue = 0;
const sumWithInitial = arr.reduce(
  (accumulator, currentValue) => accumulator + currentValue,
  initialValue
);

console.log(sumWithInitial) // 10
  • пример addEventListener()
const sayHelloWorld = () => console.log("Hello World")
btn.addEventListener("onclick" , sayHelloWorld)

В качестве последнего штриха, чтобы показать взаимосвязь между ними, важно сказать, что «функции первого класса» — это просто концепция или функция, которая либо есть, либо нет в языке программирования. Это означает, что все функции являются просто любой другой переменной, и на практике нет функции первого класса, но есть «функции высокого порядка», если язык программирования имеет концепцию функции первого класса.