什么是函數(shù)式編程
函數(shù)式是一種編程形式丽惶,你可以將函數(shù)作為參數(shù)傳遞給其他函數(shù)缅阳,并將它們作為值返回。 在函數(shù)式編程中音羞,我們以函數(shù)的形式思考和編程囱桨。
JavaScript,Haskell嗅绰,Clojure舍肠,Scala 和 Erlang 是部分實(shí)現(xiàn)了函數(shù)式編程的語言。
JavaScript 中窘面,函數(shù)是一種特殊類型的對(duì)象翠语。 它們是 Function objects。
JavaScript中函數(shù)是對(duì)象
function greeting() {
console.log('great')
}
greeting.lang = "王狗蛋";
console.log(greeting.lang);//王狗蛋
將函數(shù)賦值給變量并進(jìn)行傳遞
const number = x => x * x;
console.log(number(5));//25
const newNumber = number;
console.log(newNumber(6));//36
將函數(shù)作為參數(shù)傳遞
function formalGreeting() {
console.log("How are you?");
}
function casualGreeting() {
console.log("What's up?");
}
function greet(type, greetFormal, greetCasual) {
if (type === 'formal') {
greetFormal();
} else if (type === 'casual') {
greetCasual();
}
}
// prints what's up?"
greet('casual', formalGreeting, casualGreeting);
簡單來說财边,高階函數(shù)是一個(gè)接收函數(shù)作為參數(shù)或?qū)⒑瘮?shù)作為輸出返回的函數(shù)肌括。
Array.prototype.map
const arr = [1, 2, 3, 4, 5];
let newArry = arr.map(x => x * 3);
console.log(newArry)
Array.prototype.filter
const arr = [1, 2, 3, 4, 5];
let newArry = arr.filter(x => x > 3);
console.log(newArry)
Array.prototype.reduce
arr.reduce(callback,[initialValue])
callback (執(zhí)行數(shù)組中每個(gè)值的函數(shù),包含四個(gè)參數(shù)
1酣难、previousValue (上一次調(diào)用回調(diào)返回的值谍夭,或者是提供的初始值(initialValue))
2、currentValue (數(shù)組中當(dāng)前被處理的元素)
3憨募、index (當(dāng)前元素在數(shù)組中的索引)
4紧索、array (調(diào)用 reduce 的數(shù)組)
initialValue (作為第一次調(diào)用 callback 的第一個(gè)參數(shù)。)
var arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
},0) //注意這里設(shè)置了初始值
console.log(arr, sum);
如果沒有提供initialValue菜谣,reduce 會(huì)從索引1的地方開始執(zhí)行 callback 方法珠漂,跳過第一個(gè)索引晚缩。如果提供initialValue,從索引0開始媳危。