1.概念:以函數為基礎的編程方式和代碼組織方式,即任何代碼可以都是函數,且要求具有返回值;
// 非函數式
var title = "Functional Programming";
var saying = "This is not";
console.log(saying + title); // => This is not Functional Programming
// 函數式
var say = title => "This is " + title;
var text = say("Functional Programming"); // => This is Functional Programming
2.基本條件 — 函數為一等公民
(1)函數能被賦值給變量;
(2)函數能被當作參數傳入;
(3)函數能被當作返回值;
3.純函數(pure function):只做運算并返回一個值,沒有額外的行為;
(1)引用透明(Referential transparency) — 函數內只會依賴 傳入參數,即給予相同的參數,永遠會返回相同的返回值;
(2)沒有副作用(No Side Effect) — 不會涉及到外部變量的使用和修改;
var arr = [1, 2, 3, 4, 5];
// 純函數:slice()
arr.slice(0, 3); // [1, 2, 3]
arr.slice(0, 3); // [1, 2, 3]
// 非純函數:splice()
arr.splice(0, 3); // [1, 2, 3]
arr.splice(0, 3); // [4, 5]