1.概念:以函數(shù)為基礎(chǔ)的編程方式和代碼組織方式,即任何代碼可以都是函數(shù)愉阎,且要求具有返回值绞蹦;
// 非函數(shù)式
var title = "Functional Programming";
var saying = "This is not";
console.log(saying + title); // => This is not Functional Programming
// 函數(shù)式
var say = title => "This is " + title;
var text = say("Functional Programming"); // => This is Functional Programming
2.基本條件 — 函數(shù)為一等公民
(1)函數(shù)能被賦值給變量;
(2)函數(shù)能被當(dāng)作參數(shù)傳入榜旦;
(3)函數(shù)能被當(dāng)作返回值幽七;
3.純函數(shù)(pure function):只做運(yùn)算并返回一個(gè)值,沒(méi)有額外的行為溅呢;
(1)引用透明(Referential transparency) — 函數(shù)內(nèi)只會(huì)依賴 傳入?yún)?shù)澡屡,即給予相同的參數(shù)猿挚,永遠(yuǎn)會(huì)返回相同的返回值;
(2)沒(méi)有副作用(No Side Effect) — 不會(huì)涉及到外部變量的使用和修改驶鹉;
var arr = [1, 2, 3, 4, 5];
// 純函數(shù):slice()
arr.slice(0, 3); // [1, 2, 3]
arr.slice(0, 3); // [1, 2, 3]
// 非純函數(shù):splice()
arr.splice(0, 3); // [1, 2, 3]
arr.splice(0, 3); // [4, 5]