ES6高阶函数

面试视频 :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);
原文地址:https://www.cnblogs.com/hacker-caomei/p/14341188.html