函数Curry化

Curry化技术是一种通过把多个参数填充到函数体中,实现将函数转换为一个新的经过简化的(使之接受的参数更少)函数的技术

写个例子,该函数的作用是改变一个div的样式

function changeStyle (obj,json){
for(var attr in json){
obj.style[attr] = json[attr]
}
}

假如我接下来可能需要大量的针对某一个元素进行样式改变,这时候


function changeStyle(obj,json){
  if(typeof json === "undefined"){
    return function (json){
      cs(obj,json);
    }
  }else{
  cs(obj,json);
  }

  function cs(obj,json){
    for(var attr in json){
    obj.style[attr] = json[attr];
  }
}

下面是该函数的使用方法

var oDiv = document.getElementById("div");
changeStyle(oDiv)({
"width":"100px",
"height":"200px",
"background-color":"#c06"
})

这个例子仅仅是两个参数的情况,当参数较为复杂的时候,这种方法的好处就彻底的体现出来了

函数Curry化,布布扣,bubuko.com

时间: 2024-08-04 22:22:23

函数Curry化的相关文章

函数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))

JavaScript基础Curry化(021)

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

函数颗粒化 参数截取并传递

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> /*----函数颗粒化就是函数参数截取,并合并参数-----*/ // 在这个函数中进行add函数所需参数的截取,用到的函数slice,call,apply function curry(fn){ //截取第一个参数 var firstAgu = A

js curry化

第一篇文竟然是curry开始-- 柯里化是什么(抄的):柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数的函数,如果其他的参数是必要的,返回接受余下的参数且返回结果的新函数. 柯里化的作用感觉上就是把函数分成多段来完成,也许可以方便测试吧但是至少,可以减少重复的参数 最简单的例子function curry() {    return function (a) {        return function (b) {            return a+b+5; }

逻辑函数的化简 【数字电路】

逻辑函数的化简 先补点各种门的 basic knowledge NAND 与非 NOR或非 XOR异或 XNOR 同或 对于同或,异或之前一直没搞明白....那个该死的标记老是混淆,也不知道为嘛标记的发明人为嘛要那么标记 ...现在知道了XOR...所以异或的标记是一个圈中间一把×             化简: 上面预设的ABCD的值输出结果是1 至于化简过程是为嘛...这个就是一步步化简....各种求并消项 切记!不要搞这种傻事! 然后就是另外一个很重要的化简方法--卡诺图 将n变量的全部最

Haskell的函数中缀化

Haskell中函数一般情况下是使用前缀的方式进行操作.但是有一个方法可以将前缀方式变成中缀的方式. 我们只需要用``将函数包裹起来,就可以将一个具有2个参数的函数变成中缀形式.  Prelude> "a" `notElem` ["b"]  True  Prelude> notElem "a" ["b"]  True 函数中缀化,不但能将有2个参数的函数变成中缀形式,也可以将有2个以上的函数变成中缀形式. 但是看起

vue render函数 函数组件化

之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法,它只是一个接受参数的函数 在这个例子中,我们标记组件为functional,这意味它是无状态(没有data),无实例(没有this上下文) 一个函数化组件就像这样: Vue.component('my-component', { functional: true, // 为了弥补缺少的实例 // 提供第二个参数作为上下文 render: function (createElement, context) {

实现一个简单的curry函数

curry函数是向一个函数传入部分的参数,从而产生一个新的函数,来达到对函数实现套用的操作 首先我们为所有的函数原型添加一个方法 Function.prototype.method = function(name,func) { this.prototype[name] = func; return this; } 在这里我们为Function的原型对象添加了一个method方法 ,这样当我们为函数原型添加方法的时候,就直接添加到Function.prototype中 也就是说我们可以直接这样