О функциях:
Что такое функция высшего порядка:
Тип функции, которая принимает функции в качестве параметров или возвращает функции.

Пример АОП на Js

function say(val) {
  console.log(val)
}
Function.prototype.before = function(cb) {
  return (...args) => {
   cb(...args) 
   this(...args) //say
  }
}

let newSay =  say.before(() => { console.log("before say") })

Преимущество чистой функции

1. Один и тот же ввод приведет к тому же результату, его также можно кэшировать.

Функция запоминания

const resolver = (...args) => JSON.stringify(args)

function meoize(fn, resolver) {
   const cache = new Map();
   
   return function(...args) {
     const key = typeof resolver === 'function' ? resolver(...args) : args[0]
     let result = cache(key)
     if (result === undefined) {
        result = fn(...args)
        cache.set(key, result)
     }
     return result
  }

}

Чистая функция
общий побочный эффект:

  1. Глобальная переменная или статическая переменная изменить
  2. доступ к внешнему источнику (файл, БД, HTTP-выборка)
  3. изменить систему env
  4. обновление общей памяти
  5. дом петля …
function curry(fns) {
   const curried =  (args) => {
      if (args.length < funs.length) {
         return (...others) => curried(...args, ...others)
      }
      return fns(...args)
   }
   return curried
}
function flowRight(...args) {
  if (args.length === 1) return args[0]
  return args.reduceRight((a,b) => (...args) => b(a(...args)))
}