学习笔记
1.函数式编程
将运算过程抽象化,可以理解成数学公式
例如:y = sin(x)
2.函数也是对象,可以像值一样处理:可以作为参数,也可以作为返回值
3.高阶函数:函数作为参数或作为返回值的函数
意义:高阶函数可以抽象通用的问题,以后只需调用即可(可以不关注内部实现细节,只需关注目标)
例如,同样的循环数组,高阶函数不需要每次都使用for来挨个遍历,只需调用封装好的函数即可:
- 面向过程的方式:
let arr = [1,2,3,4];
for (i=0;i<arr.length;i++) {
console.log(arr[i])
}
- 使用高阶函数:
// 高阶函数-函数作为参数
function forEach (array, fn) {
for (let i = 0; i < array.length; i++) {
fn(array[i])
}
}
// 测试
let arr = [1, 3, 4, 7, 8]
forEach(arr, function (item) {
console.log(item)
})
// filter
function filter (array, fn) {
let results = []
for (let i = 0; i < array.length; i++) {
if (fn(array[i])) {
results.push(array[i])
}
}
return results
}
// 测试
let arr = [1, 3, 4, 7, 8]
let r = filter(arr, function (item) {
return item % 2 === 0
})
console.log(r)
常用高阶函数:map every some
// map
const map = (array, fn) => {
let results = []
for (let value of array) {
results.push(fn(value))
}
return results
}
// 测试
// let arr = [1, 2, 3, 4]
// arr = map(arr, v => v * v)
// console.log(arr)
// every
const every = (array, fn) => {
let result = true
for (let value of array) {
result = fn(value)
if (!result) {
break
}
}
return result
}
// 测试
// let arr = [9, 12, 14]
// let r = every(arr, v => v > 10)
// console.log(r)
// some
const some = (array, fn) => {
let result = false
for (let value of array) {
result = fn(value)
if (result) {
break
}
}
return result
}
// 测试
let arr = [1, 3, 5, 9]
let r = some(arr, v => v % 2 === 0)
console.log(r)