純函數(shù)
晦澀的定義是這樣的:一個(gè)函數(shù)的返回結(jié)果只依賴于它的參數(shù)嘿棘,并且在執(zhí)行過(guò)程里面沒(méi)有副作用;
總共2點(diǎn):
- 結(jié)果只依賴參數(shù)
- 執(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)⑹藕浚划a(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ù);