面试视频 :https://www.bilibili.com/video/BV1Cy4y1q7xz?from=search&seid=5116431860248709638
学习笔记:https://www.jianshu.com/p/2975c25e4d71
学习笔记:https://segmentfault.com/a/1190000018180159
高阶函数:如果一个函数符合两个规范中的任何一个,那么该函数就是高阶函数。
1 . 若A函数,接受的参数是一个函数,那么A就是可以成为高阶函数。
2. 若A函数,调用后的返回函数的方式,实现多次接受参数最后统一处理的函数编码形式,那么A就是成为高阶函数。
常见的高阶函数有: new Promise(),setTimeout(()=》{}),数组身上的常见函数都是高阶函数(arr.map,arr.filter,arr.sort)
函数的柯里化:通过函数调用,返回函数的方式,实现多次接受参数。最后统一处理的函数。
//实现一个面试题目:add(1)(2)(3)(4);
// function sum (a,b,c) { // return a+b+c // } // const result = sum(1,2,3) // console.log(result); //通过函数调用,继续返回函数的方式,实现多次接受函数,最后同意处理函数。 function sum(a) { return (b) =>{ return (c) =>{ return a+b+c } } } function add(a) {//箭头函数 return b => c => a+b+c } const result = sum(1)(2)(3) const result1 = add(3)(3)(10) console.log(result); console.log(result1);
如果是任意参数的话,则需要这么写:
function add() { //将不定参数转化为数组对象!!! var _args = Array.prototype.slice.call(arguments) var _adder= function () { _args.push(...arguments) return _adder } //toString隐形转换的特性!!! _adder.toString = function () { return _args.reduce(function(a,b) { return a+b; },0) } return _adder } let a = add(1,2,3) let b = add(1)(2)(3); console.log(a); console.log(b);