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;
    }
  • 相关阅读:
    MySQL--06
    MySQL--05
    MySQL--04
    MySQL--03
    MySQL--02
    MySQL--01
    JavaScript3
    JavaScript2
    四大函数式接口 函数型接口 断定型接口 消费型接口 供给型接口 流式计算
    课后作业-阅读任务-阅读提问-4
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12755686.html
Copyright © 2011-2022 走看看