JavaScript 函數(shù)式編程簡介
一、案例
- 案例一
function splat (fun) {
return function(array) {
return fun.apply(null, array)
}
}
var addEleFun = splat(function (x, y) {
return x + y
})
addEleFun([1, 2]) // 3
個人理解
通過這樣寫的一大好處是行為與結果分步進行,更好的解耦、組合
- 案例二
function unsplat(fun) {
return function() {
return fun.call(null. _.toArray(arguments))
}
}
var joinEle = unsplat(function(array) {
return array.join(' ')
})
joinEle('1', '$', '&')
// 1 $ &
注:apply 將參數(shù)放到數(shù)組中調用,call 與方法參數(shù)一樣
二、開始函數(shù)式編程
函數(shù)式初始
-
existy函數(shù),主要用于null與undefined值判斷,注意使用的是!=不是!==
function existy(x) {
return x != null
}
existy(null) // false
existy(undefined) // false
existy(0) // true
existy(false) // true
關于 null >= 0 的討論請參考 Franky 大大的 從 null >= 0 說起
-
truthy函數(shù),用于真值判斷,主要為false、null、undefined三個值, 如果希望數(shù)字0也為假值,請不要用這個方法
function truthy(x) {
return x !== false && existy(x)
}
truthy(0) // true
truthy(false) // false
truthy(undefined) // false
truthy(null) // false
加速
- 靜態(tài)分析器
- 谷歌的閉包編譯器(Goggle's Closure compiler)
三、總結
- 確定抽象,并為其構建函數(shù)
- 利用已有的函數(shù)來構建更為復雜的抽象
- 通過將現(xiàn)有的函數(shù)傳給其他的函數(shù)來構建更加復雜的抽象
相關文檔
- microjs.com github
- microjs.com 一些有趣的javascript庫