一個函數的返回結果只依賴於它的參數,而且在執行過程裏面沒有反作用,咱們就把這個函數叫作純函數。數組
純函數很是「靠譜」,執行一個純函數你不用擔憂它會幹什麼壞事,它不會產生不可預料的行爲,也不會對外部產生影響。函數
const a = 1 const foo = (b) => a + b foo(2) // => 3
函數依賴外部a的值 ,不是純函數。spa
const counter = { x: 1 } const foo = (obj, b) => { obj.x=2; return obj.x + b } foo(counter, 2) // => 4 counter.x // => 2
注意:函數內部 修改了 obj.x=2 ,對外部對象 counter產生影響了, 有反作用。不是純函數code
const foo = (b) => { const obj = { x: 1 } obj.x = 2 return obj.x + b }
若是是函數內部本身定義的對象,對外部沒影響 仍是純函數。對象
數組slice是純函數 ,不影響原數組 ,d3
splice不是純函數,直接修改原數組了。co