函数式编程前置知识
程序员文章站
2022-05-08 11:30:32
...
前置知识
- 函数是一等公民
- 高阶函数
- 闭包
1.函数式一等公民
- 函数可以存储在变量中
- 函数可以作为参数
- 函数可以作为返回值
函数式一等公民是学习高阶函数,柯里化等的基础
2.高阶函数
- 可以把函数作为参数传递给另一个函数
- 可以把函数作为另一个函数的返回结果
// 高阶函数-函数作为参数
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)
// 函数作为返回值
// once
function once (fn) {
let done = false
return function () {
if (!done) {
done = true
return fn.apply(this, arguments)
}
}
}
let pay = once(function (money) {
console.log(`支付: ${money} RMB`)
})
pay(5)
使用高阶函数的意义
- 可以屏蔽细节,只关注目标
- 抽象通用的问题
常用的高阶函数
forEach map filter every some reduce sort....
3.闭包
- 函数和其他周围的状态的引用捆绑在一起形成闭包
- 可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员
// once
function once (fn) {
let done = false
return function () {
if (!done) {
done = true
return fn.apply(this, arguments)
}
}
}
let pay = once(function (money) {
console.log(`支付: ${money} RMB`)
})
调试时查看闭包
代码
function makePower (power) {
return function (number) {
return Math.pow(number, power)
}
}
// 求平方
let power2 = makePower(2)
let power3 = makePower(3)
console.log(power2(4))
console.log(power2(5))
console.log(power3(4))
浏览器中打开,并设置断点
上一篇: 最后一课
下一篇: 睡眠不好如何调理 7个按摩手法调理睡眠
推荐阅读
-
拿 C# 搞函数式编程 - 1
-
Python基础编程语法(for循环、推导式、函数)
-
函数式编程语言有哪些(程序员常用的编程语言介绍)
-
JavaScript函数式编程究竟是什么?
-
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
-
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
-
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
-
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
-
函数式编程语言有哪些(程序员常用的编程语言介绍)
-
实例讲解python函数式编程