純函數(shù)

概念

純函數(shù)是這樣一種函數(shù)断序,與外界交換數(shù)據(jù)只要一個唯一渠道—參數(shù)和返回值丰歌。函數(shù)從外部接收的所有輸入信息都通過參數(shù)傳遞到該函數(shù)內(nèi)部寝志,函數(shù)輸出到外部的所有信息都通過返回值傳遞到該函數(shù)外部。
純函數(shù)不能訪問外部變量燎猛,不能修改參數(shù)曹抬。
純函數(shù)執(zhí)行過程沒有副作用。

通過代碼例子來理解純函數(shù)

例子1

let a=1;
let foo = (b)=>{
  return a+b
}
foo(1)

foo函數(shù)不是一個純函數(shù)急鳄,因為它的返回結(jié)果依賴了外部變量a谤民。

例子2

let a=1;
let foo = (b,c)=>{
  return b+c
}
foo(1,2)

foo函數(shù)是一個純函數(shù),因為它的返回結(jié)果只依賴于參數(shù)b和c疾宏。

例子3

const a = 1
const foo = (obj, b) => {
  obj.x = 2
  return obj.x + b
}
const counter = { x: 1 }
foo(counter, 2)

代碼里counter.x計算前是1张足,計算后變成了2,foo函數(shù)的執(zhí)行對外部的counter產(chǎn)生了影響坎藐,修改counter屬性的值为牍,所以這個foo函數(shù)是有副作用的,不是純函數(shù)岩馍。
但是如果在函數(shù)內(nèi)部定義了一個變量碉咆,并且修改了這個變量,沒有對外部產(chǎn)生影響蛀恩,它是沒有副作用的疫铜,是一個純函數(shù),看下面這個例子:
例子4

const a = 1
const foo = (b) => {
  const obj =  { x: 1 }
  obj.x = 2
  return obj.x + b
}
foo(2)

除了修改外部變量双谆,函數(shù)在執(zhí)行過程中還有很多方式可以產(chǎn)生副作用壳咕,比如調(diào)用DOM API修改頁面,發(fā)送了ajax請求顽馋,調(diào)用window.reload刷新了瀏覽器谓厘,console.log往控制臺打印數(shù)據(jù),等等都是副作用寸谜。

Redux程序中的reducer就是一個純函數(shù)竟稳,理解了純函數(shù),對理解Redux的源碼有幫助程帕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末住练,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子愁拭,更是在濱河造成了極大的恐慌讲逛,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岭埠,死亡現(xiàn)場離奇詭異盏混,居然都是意外死亡蔚鸥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門许赃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來止喷,“玉大人,你說我怎么就攤上這事混聊〉” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵句喜,是天一觀的道長预愤。 經(jīng)常有香客問我,道長咳胃,這世上最難降的妖魔是什么植康? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮展懈,結(jié)果婚禮上销睁,老公的妹妹穿的比我還像新娘。我一直安慰自己存崖,他們只是感情好冻记,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著来惧,像睡著了一般檩赢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上违寞,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天贞瞒,我揣著相機與錄音,去河邊找鬼趁曼。 笑死军浆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挡闰。 我是一名探鬼主播乒融,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摄悯!你這毒婦竟也來了赞季?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤奢驯,失蹤者是張志新(化名)和其女友劉穎申钩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘪阁,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡撒遣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年邮偎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片义黎。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡禾进,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出廉涕,到底是詐尸還是另有隱情泻云,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布狐蜕,位于F島的核電站壶愤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馏鹤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一娇哆、第九天 我趴在偏房一處隱蔽的房頂上張望湃累。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜒犯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背马澈。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弄息,地道東北人痊班。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像摹量,于是被迫代替她去往敵國和親涤伐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容