做网站英文编辑有前途吗品牌网络营销策划方案
防抖函数
避免短时间内的函数多次调用影响性能
function debounce(func , wait){let timer;return (...args) => {clearTimeout(timer);timer = setTimeout(() => {return func(args)} , wait)}
}
函数柯里化
将多参函数以单参的形式传递
function curry(fn){return function curryInner(...args){if(args.length >= fn.length){return fn(...args) }else{return (...args2)=>{return curryInner(...args , ...args2)}} }
}
组合与管道
不同函数的连续调用并求值
原型
//root
function compose(...funcs){return function(x){return f(g(v(z(...(x)))))}
}
递归写法
function compose(...funcs){let count = funcs.length - 1;let result;return function fn(x){if (count < 0){return result;}else{result = funcs[count--](x)//先数组,后count--return fn(result);}}
}
迭代写法
function compose(...funcs){let callback = function(f,g){return function(x){return f(g(x))}}let fn = funcs[0]for (let i = 1;i < funcs.length; i++){fn = callback(fn , funcs[i])}return fn;
}
reduce写法
function compose(...funcs){return funcs.reduce((a , b) => (x) => a(b(x)))
}
管道(pipe) -> 反向组合(从左向右读函数)
function compose(...funcs){return funcs.reverse().reduce((a , b) => (x) => a(b(x)))
}
后续会补充,此文章用来辅助记忆