JS中的純函數(shù)

純函數(shù)

晦澀的定義是這樣的:一個(gè)函數(shù)的返回結(jié)果只依賴于它的參數(shù),并且在執(zhí)行過(guò)程里面沒(méi)有副作用;

總共2點(diǎn):

  1. 結(jié)果只依賴參數(shù)
  2. 執(zhí)行過(guò)程中沒(méi)有副作用
// demo1
const a = 1
const foo = (b) => a + b
foo(2) // => 3


// demo2
const a = 1
const foo = (x, b) => x + b
foo(1, 2) // => 3


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


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

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

<font color="white">

分析
1、demo1: 不是。 因?yàn)楹瘮?shù)結(jié)果還依賴了外部變量a
2、demo2: 是。
3、demo3: 是。 只依賴入?yún)?,不產(chǎn)生副作用
4、demo4: 不是。 產(chǎn)生副作用。修改了obj.x的值
5、demo5: 是。 對(duì)內(nèi)部變量obj的修改,外部程序不可見(jiàn),無(wú)副作用
</font>

  • 副作用都包含哪些?
    1、調(diào)用 DOM API 修改頁(yè)面;
    2、發(fā)送了 Ajax 請(qǐng)求;
    3、調(diào)用 window.reload 刷新瀏覽器;
    4、甚至是 console.log 往控制臺(tái)打印數(shù)據(jù);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容