什么是函数式编程
函数式是一种编程形式,你可以将函数作为参数传递给其他函数,并将它们作为值返回。 在函数式编程中,我们以函数的形式思考和编程。
JavaScript,Haskell,Clojure,Scala 和 Erlang 是部分实现了函数式编程的语言。
JavaScript 中,函数是一种特殊类型的对象。 它们是 Function objects。
JavaScript中函数是对象
function greeting() {
console.log('great')
}
greeting.lang = "王狗蛋";
console.log(greeting.lang);//王狗蛋
将函数赋值给变量并进行传递
const number = x => x * x;
console.log(number(5));//25
const newNumber = number;
console.log(newNumber(6));//36
将函数作为参数传递
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);
简单来说,高阶函数是一个接收函数作为参数或将函数作为输出返回的函数。
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 (执行数组中每个值的函数,包含四个参数
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)
initialValue (作为第一次调用 callback 的第一个参数。)
var arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
},0) //注意这里设置了初始值
console.log(arr, sum);
如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。