什麼是柯里化?
科里化是把乙個多引數函式轉化為乙個巢狀的一元函式的過程。(簡單的說就是將函式的引數,變為多次入參)
constcurry=(
fn,...args
)=>fn.
length
<=
args
.length?fn
(...
args):
curry
.bind
(null,fn
,...
args
);// 想要看懂上面這個函式,重點在於全面理解bind的用法。
// 思路倒是很簡單,就是在引數未蒐集完善之前,通過bind來實現引數蒐集,
// 當蒐集完成時,就可以執行原函式了。
const
add=(x
,y)=>x+
y;const
curryadd
=curry
(add
);curryadd(4
)(4);// 8
關於bind的認知
1)bind不會立即執行函式,而是返回乙個新函式。譬如在 react 中我們經常用 bind 將函式的 this 指向元件本身:
exportdefault
class
clickoutside
extends
component
getcontainer
(ref
)}
2)除了 this 以外的引數,會把原函式的引數位給占領(擾亂王?鳩佔鵲巢?小三上位?),也就是預設值繫結(賦值):
// demo1: 演示預設繫結 x 和 y 的引數const
add=(x
,y, z
)=>x+
y + z
;add
.bind
(null
,1, 2
)(3)
// => 6 , 等價於 add(1, 2, 3)
// demo2: 演示多次bind
const
add=(x
,y)=>x+
y;const
myadd
=add
.bind
(null,1
).bind
(null,2
)myadd
()// => 3 , 等價於 add(1, 2)
// demo3: 和...args這種陣列解構結合使用時可別懵了 o(∩_∩)o哈哈~
const
add=
(...
args
)=>
console
.log
(args
,args
.length
);const
myadd
=add
.bind
(null,1
).bind
(null,2
).bind
(null,3
).bind
(null,4
).bind
(null,5
)myadd
()// => [1, 2, 3, 4, 5] 5
這種特性實際上和偏應用很相似,區別僅僅在於偏應用不需要關注this的繫結。
偏應用的目的只有乙個,那就是通過預設值減少函式的引數位,達到簡化函式、惰性函式、可重用函式等目的。
溫故而知新 柯里化 與 bind 的認知
什麼是柯里化?科里化是把乙個多引數函式轉化為乙個巢狀的一元函式的過程。簡單的說就是將函式的引數,變為多次入參 const curry fn,args fn.length args length?fn args curry bind null,fn args 想要看懂上面這個函式,重點在於全面理解bi...
溫故而知新 物件初始化
class的成員變數總是以其宣告的次序被初始化,而不是以建構函式的成員初始化列表的順序被初始化。對於建構函式中的函式體中的 初始化 只能算作是 偽初始化 嚴格地說,成員初始化應該放在成員初始化列表中。color red 問 如何在建構函式的成員初始化列表中初始化基本型別的定長陣列 比如對int ar...
溫故而知新 JQ的節點型別
定義和用法 查詢匹配元素內部所有的子節點 包括文字節點 如果元素是乙個iframe,則查詢文件內容 語法contents 例子 1 查詢所有文字節點並加粗 html hello john,how are you doing?jquery p contents not nodetype 1 wrap ...