1. 什么是纯函数? 一个函数的返回结果只依赖其参数,并且执行过程中没有副作用。
纯函数要满足以下三点:
相同输入总是会返回相同的输出;
不产生副作用;
不依赖于外部状态。
** 副作用: 函数执行的过程中对外部产生了可观察的变化,我们就说函数产生了副作用。
例如修改外部的变量、调用DOM API修改页面,发送Ajax请求、调用window.reload刷新浏览器甚至是console.log打印数据,都是副作用。
比如:
** 纯函数的好处:
- 加快运行速度: 纯函数可以根据输入来缓存结果,可以加快程序重复执行时的运算速度;
- 方便移植使用: 运行环境简单,挪到哪里都能用;
- 让测试更简单;
// 非纯函数
function demo2 (a:Number[]) {
a.push(10) // 修改了外部变量,产生了副作用
return a
}
// 纯函数
function demo (a:Number[]) {
return [...a, 10]
}
2. 什么是高阶函数?
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。也就是—使用函数作为参数或者返回值的函数就是高阶函数