JS中的一些常用的函數(shù)式編程術(shù)語
組合 Composition
組合某種類型(含函數(shù))的兩個元素,進而生成一個該類型的新元素:
JavaScript
let compose = (f, g) => a => f(g(a))
let toUpperCase = x => x.toUpperCase()
let exclaim = x => x + '!'
let shout = compose(exclaim, toUpperCase);
shout("hello world") // HELLO WORLD!
偏函數(shù)應(yīng)用 Partial Application
一個多參函數(shù),如果我們只提供了部分參數(shù),這種應(yīng)用就是偏函數(shù)應(yīng)用:
JavaScript
let sum3 = (a, b, c) => a + b + c let partial = sum3.bind(null, 10, 20) partial(30) // 60
柯里化 Currying
把多參數(shù)函數(shù)處理成 接受一個參數(shù),返回一個接受下一個參數(shù)的函數(shù) 的形式:
JavaScript
let curryingSum3 = (a) => (b) => (c) => a + b + c let curriedSum3 = curryingSum3(30)(20) // [Function] curriedSum3(10) // 60
注意:柯里化和偏函數(shù)應(yīng)用是不同的,它只接受單參輸入;在Haskell這樣的純函數(shù)式語言中,只存在柯里化,多參函數(shù)是一種語法糖,這樣做的好處是為函數(shù)組合提供了更靈活的手段, 并且使得接口更為流暢。
副作用 Side Effect
一個函數(shù)或表達式如果出現(xiàn)下面情況被認為有副作用:除了返回結(jié)果值,還修改了內(nèi)部狀態(tài),或者為外界植入提供了改變內(nèi)部狀態(tài)的可能。有副作用的例子:隨機數(shù)生成器 或者 IO操作 。
document。prototype。getter=function(){get(this)}
冪等 Idempotency
能夠多次使用同樣的輸入?yún)?shù)無副作用地執(zhí)行多次:
JavaScript
let id = x => x id(id(id(10))) === id(10) // true Math.abs(Math.abs(-1)) === Math.abs(-1) // true
引用透明性 Referential Transparency
一個表達式能夠被它的值替換,而不會影響計算結(jié)果,這種表達式稱為引用透明的。
JavaScript
let greeting = () => 'hello, ' greeting() + 'buddy'
上面的表達式中每次對 greeting() 的調(diào)用,都可以被替換為 'hello, ',我們可以斷言 greeting()具有引用透明性。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS實現(xiàn)計算小于非負數(shù)n的素數(shù)的數(shù)量算法示例
這篇文章主要介紹了JS實現(xiàn)計算小于非負數(shù)n的素數(shù)的數(shù)量算法,可實現(xiàn)針對一定范圍內(nèi)素數(shù)個數(shù)的統(tǒng)計功能,涉及javascript數(shù)值運算相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
javascript實現(xiàn)在指定元素中垂直水平居中
當(dāng)談到網(wǎng)頁的布局中,居中問題一直得不到很有效的解決,居中通常是相對于某一個元素的,比如我們經(jīng)常所說的屏幕居中的問題,我們了解父元素的信息越多,我們就越能更加容易的實現(xiàn)居中布局。下面我們通過具體的實例來看看javascript如何來實現(xiàn)垂直水平居中2015-09-09
javascript中BOM基礎(chǔ)知識總結(jié)
本文主要對javascript中BOM基礎(chǔ)知識進行總結(jié)。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02

