函式柯里化

2021-09-14 00:40:48 字數 1592 閱讀 7760

在電腦科學中,柯里化(currying)是把接受多個引數的函式變換成接受乙個單一引數(最初函式的第乙個引數)的函式,並且返回接受餘下的引數且返回結果的新函式的技術。這個技術由 christopher strachey 以邏輯學家 haskell curry 命名的,儘管它是 moses schnfinkel 和 gottlob frege 發明的。
大神用於函式柯里化用的比喻相當的形象非常有助於理解~

「柯里化」就像某些**的把戲,**要弄7個老婆,礙於國策(一夫一妻)以及年老弟衰,表面上就1個老婆,實際上剩下的6個暗地裡消化,**表示如下:

var curring = function(fn)

}// 下面為**如何搞定7個老婆做測試

// 獲得合法老婆

var getwife = currying(function(),"合法老婆");

// 獲得其他6個老婆

getwife("小老婆1","小老婆2","小老婆3","小老婆4","小老婆5","小老婆6");

// 換一批老婆

getwife("大老婆","小老婆","俏老婆","刁蠻老婆","乖老婆","送上門老婆");

// 再換一批老婆

getwife("超越韋小寶的老婆");

效果是這樣的~

理解理解之後再想想,這個東西有什麼用啊~~

柯里化有三個常見的應用:

這裡舉個很實用的例子,相容現代瀏覽器以及ie瀏覽器的事件新增方法:

var addevent = function(el, type, fn, capture) , capture);

} else if (window.attachevent) );

} };

上面的方法有什麼問題呢?很顯然,我們每次使用addevent為元素新增事件的時候,(eg. ie6/ie7)都會走一遍if...else if ...,其實只要一次判定就可以了,怎麼做?–柯里化。改為下面這樣子的**:

var addevent = (function(), (capture));

};} else if (window.attachevent) );};}

})();

初始addevent的執行其實只實現了部分的應用(只有一次的if...else if...判定),而剩餘的引數應用都是其返回函式實現的,典型的柯里化。

var curryweight = function(fn)  else 

}};var weight = 0;

var addweight = curryweight(function() {

var i=0; len = arguments.length;

for (i; i先傳入引數,直到呼叫的時候才執行計算~

今天的分享就先到這裡了~願與各位共勉~

函式柯里化

在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。在直覺上,柯里化聲稱 如果你固定某些引數,你將得到接受餘下引數的乙個函式 柯里化實現的原理 在函式式程式語言中,將函式可以當做物件傳遞呼...

函式柯里化

curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...

函式柯里化

curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...