高阶函数
可以把函数作为参数传递给另一个函数
可以把函数作为另一个函数的返回结果
//函数作为参数
function forEach(array, fn){
for(let i = 0; i < array.length; i++){
fn(array[i])
}
}
//测试
let arr = [1, 2, 3, 4, 5];
forEach(arr, function(item){
console.log(item)
})
//函数作为返回值
function makeFn() {
let msg = 'Hello function';
return function () {
console.log(msg)
}
}
const fn = makeFn();
fn();
纯函数
相同的输入永远会得到相同的输出
let array = [1, 2, 3, 4, 5];
//slice纯函数
console.log(array.slice(0, 3));
console.log(array.slice(0, 3));
console.log(array.slice(0, 3));
//splice不纯的函数,每次调用都改变数组元素
console.log(array.splice(0, 3));
console.log(array.splice(0, 3));
console.log(array.splice(0, 3));
//自己写纯函数
function getSum(n1, n2){
return n1 + n2;
}
console.log(getSum(1, 2));
console.log(getSum(1, 2));
console.log(getSum(1, 2));
函数式编程不会保留计算中间的结果,
变量是不可变的(无状态的)
我们可以把一个函数的执行结果交给另一个函数处理