前端开发中的柯里化

    xiaoxiao2021-04-17  209

    一、 定义

    引用维基百科的定义:

    在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由克里斯托弗·斯特雷奇以逻辑学家哈斯凯尔·加里命名的,尽管它是Moses Schönfinkel和戈特洛布·弗雷格发明的。

    按照轮子哥的说法:

    从纯粹的语义上,curry化就是lambda表达式的一个糖,不要想太多。

    //常规写法 let sum= (a,b,c)=>{return a+b+c}; //柯里化写法 let currySum = a => b => c => {return a+b+c}; function currying(fn) { var slice = Array.prototype.slice, __args = slice.call(arguments, 1); return function () { var __inargs = slice.call(arguments); return fn.apply(null, __args.concat(__inargs)); }; }

    二、意义

    2.1 提高适用性

    function square(i) { return i * i; } function dubble(i) { return i *= 2; } function map(handeler, list) { return list.map(handeler); } // 数组的每一项平方 map(square, [1, 2, 3, 4, 5]); map(square, [6, 7, 8, 9, 10]); map(square, [10, 20, 30, 40, 50]); // ...... // 数组的每一项加倍 map(dubble, [1, 2, 3, 4, 5]); map(dubble, [6, 7, 8, 9, 10]); map(dubble, [10, 20, 30, 40, 50]);

    柯里化不仅仅是提高了代码的合理性,更重的它突出一种思想---降低适用范围,提高适用性。

    2.2 延迟执行

    var curry = function(fn) { var _args = [] return function cb() { if (arguments.length == 0) { return fn.apply(this, _args) } Array.prototype.push.apply(_args, arguments); return cb; } }

    2.3 固定易变因素

    柯里化特性决定了它这应用场景。提前把易变因素,传参固定下来,生成一个更明确的应用函数。最典型的代表应用,是bind函数用以固定this这个易变对象。

    Function.prototype.bind = function(context) { var _this = this, _args = Array.prototype.slice.call(arguments, 1); return function() { return _this.apply(context, _args.concat(Array.prototype.slice.call(arguments))) } } 相关资源:七夕情人节表白HTML源码(两款)

    最新回复(0)