zoukankan      html  css  js  c++  java
  • 函数柯里化

    什么是函数柯里化?

    就是将一个多参数函数,转换为单一参数(原参数的第一个)的函数,并在其返回函数中传入余下参数、返回结果。

    柯里化有哪些好处?

    参数复用

    在以下柯里化函数中,只需要第一次传入正则表达式,后面只要是检测同一正则表达式就只需调用返回的函数

    function check(reg){
        return function(str){
            return reg.test(str);
        }
    }
    
    var checknum = check(/^[0-9]+$/);
    var checkStr = check(/^[a-zA-Z]+$/);
    console.log(checknum('123456'));
    console.log(checknum('1234sd'));
    console.log(checkStr('adafd'));
    console.log(checkStr('ads2'));

    提前判断

    在以下代码中,提前判断浏览器是否支持addEventListener,再返回相应函数,就不用每次注册事件都进行判断

    var on = (function () {
        if (document.addEventListener) {
            return function (element, event, handler) {
                if(element && event && handler){
                    element.addEventListener(event, handler, false)
                }
            };
        }else{
            return function(element, event, handler){
                if(element && event && handler){
                    element.attachEvent('on' + event, handler)
                }    
            }
        }
    })();

    实现bind函数、延迟执行

    为函数改变this指向,并返回函数,执行函数才会执行

    Function.prototype.bind = function(context){
        var _this = this;
        var args = Array.prototype.slice.call(arguments, 1);
        return function () {
            return _this.apply(context, args.concat(Array.prototype.slice.call(arguments)))
        }
    }

    通用封装

    function currying(fn) {
        var l = fn.length,
        args = [];
        var result = function (arg) {
            args.push(arg);
            l--;
            if (l <= 0) {
                return fn.apply(this, args);
            }else{
                return result;
            }
        }
        return result;
    }
  • 相关阅读:
    spring-boot整合freemarker 出现404
    java rmi的基本使用
    spring的Autowired、Resource、Inject的使用
    RabbitMQ topic 交换器
    RabbitMQ direct交换器
    RabbitMQ java 原生代码
    RabbitMQ基本概念
    消息中间件
    设计模式——模板模式
    设计模式——代理模式
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12755686.html
Copyright © 2011-2022 走看看