在電腦科學中,柯里化(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...