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

Примечание. Количество аргументов, которые принимает функция, также называется арностью.

function multiply(x){
  return(y) => {
    return(z) => {
      return x*y*z
    }
  }
}

console.log(multiply(1)(2)(3))

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

Это также помогает разделить функцию на более мелкие многократно используемые функции, которые несут единую ответственность.

let composition=function(f,g){
  return function(x){
    return f(g(x))
  }
};

let add=function(num){
  return num+10;
}

let multiply=function(num){
  return num * 10
}
let ans = composition(multiply, add)
ans(5) // (5+10*10==150)

Closures
Closure — это функция, которая сохраняет доступ к переменным и аргументам внешней функции даже после завершения выполнения внешней функции. Замыкания полезны для сокрытия деталей реализации в JavaScript. Другими словами, может быть полезно создать приватные переменные или функцию.

function count() {
  let c = 0;
  function incr() {
    c = c+1;
    return c;
  }
  return incr;
}
const generatedId = count()

generatedId() //1
generatedId() //2

Объединение
Нулевой оператор объединения ?? является логическим оператором, который возвращает свой правый операнд, когда его левый операнд равен нулю или не определен, и в противном случае возвращает свой левый операнд. Нулевой оператор объединения удобен, когда вы хотите использовать ложные значения по умолчанию или просто хотите использовать ложные значения как действительные.

const value  = 0 ?? 100;   //0
const value = false ?? true;  //false

const value = null ?? 100; //100
const value = undefined ?? 100 //100

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

Методы делятся на два:
1. Методы самоанализа, которые являются неразрушающими методами.
2. Деструктивные методы модификации, поскольку они мутируют объект или его поведение.

const person = {
  name : 'Bob',
  [Symbol('email')]: '[email protected]' 
}

Reflect.get(person, 'name') //Bob
Reflect.has(person, 'email')  //true
Reflect.has(person, 'phone') //false

Reflect.getPrototypeOf(person) // { Consturctor ...}
Reflect.ownKeys(person)  //name Symbol(email)

Reflect.defineProperty(person, 'phone', {writable: true});
Reflect.has(person, 'phone') //true
Reflect.set(person, 'phone', '12345677') 



Reflect.deleteProperty(person, 'phone')
Reflect.has(person, 'phone') //false

Если вам понравился мой блог, подписывайтесь на меня в: Rhea RB

Спасибо за чтение ! Удачного кодирования !!