О функциях:
Что такое функция высшего порядка:
Тип функции, которая принимает функции в качестве параметров или возвращает функции.
Пример АОП на 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 } }
Чистая функция
общий побочный эффект:
- Глобальная переменная или статическая переменная изменить
- доступ к внешнему источнику (файл, БД, HTTP-выборка)
- изменить систему env
- обновление общей памяти
- дом петля …
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))) }