函数式编程是对运算过程进行抽象,数据(函数)之间的映射关系。
最大程度的重用我们的函数
纯函数:相同的输入始终有相同的输出。
函数式一等公民:函数可以存储在变量中、函数可以作为参数、函数可以作为返回值。
高阶函数:
1.可以把函数作为参数传递给另一个函数。
2.可以把函数作为另一个函数的返回结果。
函数作为参数例子:
function forEach(arr, fn) {
for (let value of arr) {
fn(value)
}
}
let arr = [1, 2, 3]
forEach(arr, val => console.log(val))
function filter(arr, fn) {
let result = []
for (let value of arr) {
if(fn(value)) {
result.push(value)
}
}
return result
}
let arr = [1, 2, 3]
console.log(filter(arr, val => val > 2))
const map = function (arr, fn) {
let result = []
for(let value in arr) {
result.push(fn(value))
}
return result
}
let arr = [1, 2, 3]
console.log(map(arr, val => val * val))
const every = function(arr, fn) {
let result = true
for (let value in arr) {
result = fn(value)
if (!result) {
break
}
}
return result
}
let arr = [1, 2, 3]
every(arr, v => v > 1)
const some = function(arr, fn) {
let result = false
for (let value in arr) {
result = fn(value)
if (result) {
break
}
}
return result
}
let arr = [1, 2, 3]
some(arr, v => v > 1)
函数作为返回值例子:
const makeFn = function() {
const msg = 'hello'
return function() {
console.log(msg)
}
}
makeFn()()
const once = function(fn) {
let done = false;
return function() {
if (!done) {
done = true;
return fn.apply(this, arguments)
}
}
}
let pay = once(function(money) {
console.log(money)
})
pay('yiyuan')
pay('2')
使用高阶函数的意义:
抽象可以帮助我们屏蔽细节,只需要关注我们的目标
高阶函数式用来抽象通用的问题
常用的高阶函数:
forEach、map、filter、every、some、find/findIndex、reduce、sort
网友评论