• 函数柯里化


    柯里化:一个函数原本有多个参数,只传入一个参数,生成一个新函数,由新函数接收剩下的参数;

    偏函数:一个函数原本有多个函数,只传入一部分参数,生成一个新函数,由新函数接收剩下的参数

    高阶函数: 一个函数A,参数是一个函数B,该函数A对这个参数B进行加工,得到一个函数,这个加工用的函数A就是高阶函数

    为什么要柯里化?

    提升性能:可以缓存一部分能力

    将以下函数柯里化

    function add(a, b, c) { return a + b + c; }

    实现

            function curryFunc(func, args) {
                var funcLen = func.length;
                var args = args || [];
                return function() {
                    var _args = [].slice.call(arguments);
                    [].push.apply(_args, args);
                    // 如果参数个数小于最初的func.length,则递归调用,继续收集参数
                    if (_args.length < funcLen) {
                        return curryFunc.call(this, func, _args);
                    }
                    return func.apply(this, _args);
                }
    
            }

    应用

            function add(a, b, c, d) {
                return a + b + c + d;
            }
            var curryAdd = curryFunc(add);
            let a = curryAdd(7, 1, 1);
            let b = curryAdd(7)(1)(1);
            console.log(a, b); //9, 9

    参数个数应与func保持一致

            function add(a, b, c, d) {
                return a + b + c + d;
            }
            var curryAdd = curryFunc(add);
            let a = curryAdd(7, 1, 1, 1);
            let b = curryAdd(7)(1)(1)(1);
            console.log(a, b);

    再应用

    function check(targetString, reg) {
                return reg.test(targetString);
            }
            var _check = curryFunc(check);
            var checkPhone = _check(/^1[34578]d{9}$/);
            var isphone = checkPhone('183888888');  //false
  • 相关阅读:
    句子反转
    python中计时模块timeit的使用方法
    python入门(一)
    将小程序的API封装成支持Promise的API
    微信小程序实现导航功能的操作步骤
    微信小程序朋友转发和朋友圈分享
    js原生上传图片
    FormData
    原生 websocket
    判断手机终端是pc还是移动端,并自动跳转
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/14534050.html
Copyright © 2020-2023  润新知