js curry化

第一篇文竟然是curry开始……

柯里化是什么(抄的):柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数的函数,如果其他的参数是必要的,返回接受余下的参数且返回结果的新函数。

柯里化的作用感觉上就是把函数分成多段来完成,也许可以方便测试吧
但是至少,可以减少重复的参数

最简单的例子
function curry() {
    return function (a) {
        return function (b) {
            return a+b+5;

}
    }
}

var test = curry();
console.log(test(1)(2));
console.log(test(3)(4));
通过curry化,原来需要传2个参数的函数变成1次传1个参数

例子2
function curry(){
    var arrayArgs = Array.prototype.slice.apply(arguments);
    return function(){
        //这个arguments是调用它的函数的arguments,在本例中即为test的arguments
        var wholeArgs = arrayArgs.concat(Array.prototype.slice.apply(arguments));
        return wholeArgs;
    }
}

var test = curry(‘fixed‘);
var result = test(‘new1‘,‘new2‘);
for(var i in result )
    console.log(result[i]);
var result = test(‘new3‘);
for(var i in result )
    console.log(result[i]);

这样的话,fixed只需要1次,之后使用的时候再也不用重复输入了
当然 可以让curry设置成接受高阶函数,这样会更灵活

还有一些作用,如延迟计算等,因为curry化有点难,似乎带来的效果也不会很好(似乎),所以先不写了

时间: 2024-08-04 23:49:01

js curry化的相关文章

JavaScript基础Curry化(021)

时候我们希望函数可以分步接受参数,并在所有参数都到位后得到执行结果.为了实现这种机制,我们先了解当函数在Javascript中的应用过程: 1. 函数的“应用”(Function Application) 在 函数化程序语言中,函数(Function)不是被调用(invoked)或被执行(called)的,而是被应用的(applied).在 Javascript中,函数是一个对象,因此它也可以被“应用”: Function.prototype.apply().下面就是一个例子: // defin

函数Curry化

Curry化技术是一种通过把多个参数填充到函数体中,实现将函数转换为一个新的经过简化的(使之接受的参数更少)函数的技术 写个例子,该函数的作用是改变一个div的样式 function changeStyle (obj,json){ for(var attr in json){ obj.style[attr] = json[attr] } } 假如我接下来可能需要大量的针对某一个元素进行样式改变,这时候 function changeStyle(obj,json){ if(typeof json

函数Curry化----对不起,我有代码洁癖

之前写过一个函数Curry化的小文章 那会儿对Curry化的理解不够深,平时遇到的需要Curry化的例子也比较少,今天,重新整理这个问题 函数Curry化,其实就是将一个参数非常多的函数,在大多数参数都相同的情况下,生成一个新的参数比较少的函数的过程 但是,有一个无法解决的问题,至少我不知道该怎么办,就是只能按顺序去省略参数 上代码,先从简单的例子说起 function add( a , b , c){ return a + b + c; } 该方法可以计算三个数的合. add(1,2,3);

curry化函数

Curry化是一个转换过程,即我们执行函数的转换过程. function fn(x,y){        if(typeof y=="undefined"){            return function(y){                return x+y;            }        }        return x+y; } console.log(fn(10,5)) console.log(fn(10)(5))

JS 组件化开发 系列(一)

JS 组件化开发 系列 作为前端开发,组件化开发是你成长的必经之路.时间的积累逐渐摸索出自己比较好的开发方式. --- zenking (1)实现最简单的组件化: var jdb ={ alert: function(str) { alert(str); }, console:function (str) { console.log(str) } } 这样就是简单的实现 jdb.alert.jdb.console 两个方法. 但是呢? 现在需求改了, 需要实现链式调用. 就是像jquery 一样

vue.js组件化开发实践

前言 公司以往制作一个H5活动,特别是有一定统一结构的活动都要每次用html.css.js滚一次重复的轮子,费时费力.后来接到了一个基于模板的活动发布系统的需求,于是就有了下面的内容. 开始 需求一到,接就是怎么实现,技术选型自然成为了第一个问题.鉴于目前web前端mvvm框架的流行,以及组件化开发方式的出现,决定采用vue进行开发. 这里首先简单说下web前端组件化开发方式的历程: 最早的组件化结构,或者叫做组件化1.0时代,代码结构可能如下: 1 - lib/components/calen

js 组件化

我的github样例:https://github.com/hzijone/javascript_module js 用对象的方式实现组件化. 1.对一个对象里增加方法的方式: 把模块的变量传给函数,实现动态创建. 2.require.js加载多个js文件时,可以通过优化合并只成为一个js文件,避免网络拥塞.

JS组件化验证检测

作者:Jiang, Jilin 在web开发过程中,我们时常会遇到输入检测的情况.如果只是简单的输入验证检测,例如邮箱.电话等.我们可以简单的使用if-else if-来依次判断.但是如果这些判断存在延迟检测(例如ajax验证),再使用if-else if-已经无法满足需求了. 但是好在,利用jQuery的deffer方法.通过done(func)嵌套,可以实现序列化的检测: $deferred.done(function() { // Condition $deferred.done(func

jQuery验证控件jquery.validate.js汉化

如需要修改,可在js代码中加入: jQuery.extend(jQuery.validator.messages, {  required: "必选字段",  remote: "请修正该字段",  email: "请输入正确格式的电子邮件",  url: "请输入合法的网址",  date: "请输入合法的日期",  dateISO: "请输入合法的日期 (ISO).",  number