在數學和電腦科學中,柯里化是一種將使用多個引數的乙個函式轉化為一系列使用乙個引數的函式的技術。
先來認識一下函式柯里化的使用方式
function
demo
(a, b, c)
var newdemo =
curry
(demo)
newdemo(1
)(2)
(3)
先來做乙個簡單的工具函式 fixedparamscurry,能實現如下的功能
function
demo
(a, b, c, d)
// 該工具函式可以接收乙個函式和若干預設引數,返回乙個新函式
// 新函式被呼叫時,包括預設引數在內,必須把接收的函式的引數湊滿
var newdemo_1 =
fixedparamscurry
(demo)
console.
log(
newdemo_1(1
,2,3
,4))
// 10
var newdemo_1 =
fixedparamscurry
(demo,1)
console.
log(
newdemo_1(2
,3,4
))// 10
var newdemo_1 =
fixedparamscurry
(demo,1,
2)console.
log(
newdemo_1(3
,4))
// 10
var newdemo_1 =
fixedparamscurry
(demo,1,
2,3)
console.
log(
newdemo_1(4
))// 10
var newdemo_1 =
fixedparamscurry
(demo,1,
2,3,
4)console.
log(
newdemo_1()
)// 10
/** * 下一次一定要傳滿引數的輔助函式
* @param fn fn
*/function
fixedparamscurry
(fn)
}
接下來正式開始實現柯里化函式
function
demo
(a, b, c, d)
var newdemo =
curry
(demo)
newdemo(1
)(2)
(3)(
4)newdemo(1
,2)(
3)(4
)newdemo(1
)(2,
3)(4
)newdemo(1
)(2)
(3,4
)newdemo(1
,2)(
3,4)
newdemo(1
,2,3
)(4)
newdemo(1
)(2,
3,4)
newdemo(1
,2,3
,4)/**
* 柯里化函式 ( 期待你下一次把引數傳滿,傳不滿也沒關係,就返回個函式嘛,再期待下一次引數傳滿 )
* @param fn 需要被柯里化的函式
* @param length 被柯里化的函式的形參個數
*/function
curry
(fn, length)
else
}}
函式為什麼需要被柯里化?來看如下示意
// 僅做示意
function
ajax
(method, url, data)
// 如下**是冗餘的
ajax
('post'
,'','name=lpj'
)ajax
('post'
,'','name=lpj'
)ajax
('post'
,'','name=xl'
)// 利用柯里化
var ajaxcurry =
curry
(ajax)
// 以post方式請求資料
var post =
ajaxcurry
('post'
)post
('','name=lpj'
)post
('','name=lpj'
)// 以post方式請求介面''
var postgetdata =
post
('')postgetdata
('name=lpj'
)postgetdata
('name=xl'
)
你不知道的秘密之函式節流
其實函式節流就像日常生活中乙個沒擰緊的一滴一滴地滴水的水龍頭 我們先用 模擬一下一旦敲一下水龍頭就立刻滴下一滴水的情景 取乙個水桶 var oshuitong document.getelementbyid shuitong 滴水函式 function dishui 乙個神奇的水龍頭 var olo...
守望先鋒中你不知道的秘密
學號 16340098 學院 資料科學與計算機學院 2對於廢鼠跟狂鼠問題 3距離不同每個人的傷害也不同我們用 形式直觀明了的表示 4對於遊戲中的一些小技巧 原文參考 有好多人反映,狂鼠好難玩呢,玩好的都是學霸,拋題運動學的超好,那麼我們就來研究一下狂鼠炸彈的拋物線軌跡。其實這只是乙個簡單的拋體運動公...
電腦鍵盤上你不知道的秘密
1.按住windows l鍵,這樣電腦就直接鎖屏了 2.windows e鍵,直接開啟電腦的資源管理器 3.windows d鍵,看,桌面閃現!4.windows tab鍵,可以以3d效果顯示切換視窗 5.windows自帶的錄影功能。按下windows鍵 r,輸入psr.exe回車,然後就可以開始...