学习笔记(一)—— 函数式编程

2020-08-25  本文已影响0人  彪悍de文艺青年

最近参加拉勾教育大前端高薪训练营,开始对前端知识体系进行一个系统的扩展跟学习,通过每天定期的学习,对一些不常使用的知识点进行了了解和补充,同时对已经使用过的知识点温故而知新
在此记录学习笔记,并根据学习进度定时跟新

函数一等公民 (First-class Function)

高阶函数(Higher-order Function)

常用的高阶函数及模拟实现

// forEach
const forEach = (array, fn) => {
    for (let t of array) {
        fn(t)
    }
}
// filter
const filter = (array, fn) => {
    let result = []
    for (let t of array) {
        fn(t) && result.push(t)
    }
    return result;
}
// map
const map = (array, fn) => {
    let result = []
    for (let t of array) {
        result.push(fn(t))
    }
    return result
}
// some
const some = (array, fn) => {
    for (let t of array) {
        if(fn(t)) {
            return true
        }
    }
    return false
}
// every
const every = (array, fn) => {
    for (let t of array) {
        if(!fn(t)) {
            return false
        }
    }
    return true
}
// once
const once = (fn) => {
    let done = false
    return (...args) => {
        if (!done) {
            done = true
            return fn.apply(this, args)
        }
    }
}

闭包 (Closure)

纯函数

Lodash

具体参见Lodash官网

纯函数的好处

副作用

柯里化(Currying)

// curry
function curry (fn) {
    return function (...args) {
        if (args.length < fn.length) {
            return function() {
                return fn(...args, ...arguments)
            }
        }
        return fn(...args)
    }
}

函数组合(compose)

函子(Functor)

上一篇下一篇

猜你喜欢

热点阅读