1,函数可作为参数
// 1.1高阶函数----函数作为参数【函数作为参数:使函数变得更灵活--因为具体的函数内容可以在引用函数时定义】
function ff(array,fn) {
for(let i = 0; i<array.length;i++) {
fn(array[i]);
}
};
let arr = [1,2,3,5,6,7];
ff(arr,function(item) {
console.log(item);//1 2 3 5 6 7
});
// //1.2高阶函数强化---函数作为参数:filter 【过滤数组中满足条件的函数。遍历数组,把数据中满足条件的元素先存储起来,最终返回结果。】
function filter (array,fn) {
let results = [];
for(let i = 0;i<array.length;i++) {
if(fn(array[i])) {//如果数组中的这个元素满足条件fn,就把该元素存储在数组results中
results.push(array[i]);
}
}
return results;
}
let testarr = [1,2,4,6,7,9];
let a = filter(testarr,item => {//定义一个变量用来接收过滤函数的返回结果
return item % 2 === 0;
});
console.log(a);//[2,4,6]
2,函数可作为返回值–让函数去生成一个函数
// 2.1 高阶函数-函数作为返回值
function makeFn () {
let msg = 'hello';
return function () {
console.log(msg);
}
};
// const fn = makeFn();
// fn();
makeFn()();// makeFn()函数的返回结果是个函数 ,再接个()就可以访问到
// 2.2高阶函数-函数作为返回值
//once只执行一次的函数 知识储备:apply
function once (fn) {
let done = true;
return function () {
if(done) {
done = false;
return fn.apply(this,arguments)
}
}
}
let paymoney = once (function(money) {
console.log(`支付:${money}RMB`);
});
paymoney(5);//尽管调用很多次也只会执行一次
paymoney(5);
paymoney(5);
paymoney(5);
3,函数可赋值给变量
function filter (array,fn) {
let results = [];
for(let i = 0;i<array.length;i++) {
if(fn(array[i])) {//如果数组中的这个元素满足条件fn,就把该元素存储在数组results中
results.push(array[i]);
}
}
return results;
}
let r = filter(array1, item => {
return item % 2 === 0;
});
console.log(r);