国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript函數式編程(Functional Programming)純函數用法分析

來源:懂視網 責編:小采 時間:2020-11-27 21:56:24
文檔

JavaScript函數式編程(Functional Programming)純函數用法分析

JavaScript函數式編程(Functional Programming)純函數用法分析:本文實例講述了JavaScript函數式編程(Functional Programming)純函數用法。分享給大家供大家參考,具體如下: 函數式編程鼓勵我們多創建純函數(pure functions),純函數只依賴你交給它的東西,不使用任何函數以外的東西,也不會影響到函數以外的東西。跟純
推薦度:
導讀JavaScript函數式編程(Functional Programming)純函數用法分析:本文實例講述了JavaScript函數式編程(Functional Programming)純函數用法。分享給大家供大家參考,具體如下: 函數式編程鼓勵我們多創建純函數(pure functions),純函數只依賴你交給它的東西,不使用任何函數以外的東西,也不會影響到函數以外的東西。跟純

本文實例講述了JavaScript函數式編程(Functional Programming)純函數用法。分享給大家供大家參考,具體如下:

函數式編程鼓勵我們多創建純函數(pure functions),純函數只依賴你交給它的東西,不使用任何函數以外的東西,也不會影響到函數以外的東西。跟純函數對應的就是不純函數(impure functions),也就是不純函數可能會使用函數以外的東西,比如使用了一個全局變量。也可能會影響到函數以外的東西,比如改變了一個全局變量的值。

多使用純屬函數是因為它更可靠一些,也沒什么副作用(side effects)。你交給它同樣的值,它每次都會給你輸出同樣的結果,這種特質叫所指透明(Referential transparency) 。這會讓程序更穩定,也更容易測試。

副作用

純函數沒副作用,有副作用的函數都不純。我吃了一片感冒藥,是要治我的感冒,但副作用是它讓我想睡覺。函數的副作用多數表現為函數依賴或者改變了它以外的東西。

看個例子:

let name = 'longzhoufeng'
const greet = () => {
 console.log(`hello, ${name}`)
}

greet 不是純函數,因為這個函數依賴函數以外的東西,這里就是全局作用域下的 name。這樣做的問題是,函數依賴的 name 很可能在應用運行的時候發生變化,這樣試一下:

greet() // 
輸出:“hello, longzhoufeng” let name = 'longzhoupeng' // name 的值被改變了 greet() // 輸出:“hello, longzhoupeng”

這樣改一下:

const greet = (name) => {
 console.log(`hello, ${name}`)
}

現在函數明確的說明了自己需要的東西,這里就是 name 參數。它現在只依賴你交給它的 name 參數的值。但是這個函數仍然不是純函數,因為它在控制臺上輸出了東西,這其實改變了函數之外的東西,所以它不是純函數。這樣再改一下:

const greet = (name) => {
 return `hello, ${name}`
}

現在 greet 就會是一個純函數,因為它只依賴交給它的 name ,也沒有改變函數以外的東西。而且你每次給它同樣的 name 值,它每次都會給我們返回同樣的結果。這種函數用起來即安全又可靠。

所指透明

所指透明(Referential transparency)。比如我說:“中國的首都”。我的表達所指的意思就是 “北京”,沒什么其它的隱含的意思。所以可以說我的表達所指是透明的(Referentially transparent)。再比如:“我有點餓”。這個表達所指就不透明,我表達的到底是什么意思是不能確定的,我可能是想出去吃點東西,也可能是想讓你幫我買點東西回來吃。

純函數所指的東西都是透明的,因為你給它同樣的東西,它每次都會返回一樣的結果。

const greet = (name) => {
 return `hello, ${name}`
}
const logger = (message) => {
 console.log(message)
}
logger(greet('longzhoufeng'))
// 上面的表達式也可以這樣:
logger('hello, longzhoufeng')
// 得到的結果是一樣的,因為 greet 所指透明。
// 給它一個 “longzhoufeng”,它所指的東西就是 “hello, longzhoufeng”

因為 greet 所指透明,所以如果我們在表達式中把它替換成它所指的東西,不會影響到程序的運行。比如在一個表達式里所有使用 greet('longzhoufeng') 的地方,我們都可以把 greet('longzhoufeng') 替換成 hello, longzhoufeng,這是因為 greet('longzhoufeng') 所指的東西就是字符串 hello, longzhoufeng 。

參考資料

http://stackoverflow.com/questions/210835/what-is-referential-transparency

更多關于JavaScript相關內容可查看本站專題:《JavaScript常用函數技巧匯總》、《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript數算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript函數式編程(Functional Programming)純函數用法分析

JavaScript函數式編程(Functional Programming)純函數用法分析:本文實例講述了JavaScript函數式編程(Functional Programming)純函數用法。分享給大家供大家參考,具體如下: 函數式編程鼓勵我們多創建純函數(pure functions),純函數只依賴你交給它的東西,不使用任何函數以外的東西,也不會影響到函數以外的東西。跟純
推薦度:
標簽: 用法 函數 分析
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top 主站蜘蛛池模板: 久久久久久久久久久9精品视频 | 国产免费视屏 | 日韩欧美一区二区三区 | 国产高清免费视频 | 五月天婷婷基地 | 性夜影院爽黄a爽免费看网站 | 精品国产乱码久久久久久浪潮 | 91精品国产高清91久久久久久 | 国产一区欧美二区 | 九九久久久2 | 午夜精品视频在线观看 | 欧美日韩亚洲一区二区三区在线观看 | 人成精品视频三区二区一区 | 日本特级淫片免费 | 日本成人一区二区 | 欧美国产日韩综合 | 日本a中文字幕 | 欧美 日韩 成人 | 91在线 一区 二区三区 | 欧洲日韩视频二区在线 | 日本成人一区 | 欧美成人猛男性色生活 | 欧美色视频在线观看 | 91精品国产乱码久久久久久 | 欧美一区二区日韩一区二区 | 国产精品视频免费观看 | 亚洲国产精品久久久久久 | 另类欧美日韩 | 在线亚洲欧美日韩 | 欧美日韩中字 | 羞羞网站在线观看 | 日韩综合在线视频 | 亚欧国产 | 欧美影欧美影院免费观看视频 | 一区二区亚洲视频 | 欧美一区二区日韩一区二区 | 国产综合亚洲欧美日韩一区二区 | 九九精品视频一区在线 | 国产偷窥在线观看 | 欧美精品在线观看视频 | 日韩首页 |