由来: MDN First-class Function
- 函数存储在变量中
- 函数可以作为参数
- 函数作为返回值
在JavaScript中函数是一个对象的表现形式, 可以通过 new Function() 实例化对象, 将函数存储在变量或者数组中,也可以作为一个函数的参数传递, 也可以作为函数返回值来执行
//把函数赋值给变量
let fn = function(){
console.log('123')
}
fn()
//示例
const obj = {
index: fn
}
函数作为参数
/**
* @desc 函数作为参数
*/
function forEach(arr, fn) {
for (let i = 0; i < arr.length; i++) {
fn(arr[i]);
}
}
// 测试
// let arr = [1,2,3,4,5,6,7,8,9]
// forEach(arr, (val)=>{
// console.log(val)
// })
/**
* @desc 函数作为参数
*/
// function filter(arr, fn) {
// let result = [];
// for (let i = 0; i < arr.length; i++) {
// if (fn(arr[i])) {
// result.push(arr[i]);
// }
// }
// return result;
// }
// const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
// const res = filter(arr, (val) => {
// return val % 2 === 0;
// });
// console.log(res)
function map(arr, fn){
let result = [];
for (let i = 0; i < arr.length; i++){
if(fn(arr[i])){
result.push(arr[i])
}
}
return result;
}
const arr = [1, 2, 3, 4, 5, 6,]
const res = map(arr, (val) =>{
if(val > 3){
return val > 3 ? true : false
}
})
console.log(res)
函数作为返回值
/**
* 函数作为返回值
*/
function makeFn() {
const msg = "hello";
return () => {
console.log(msg);
};
}
// makeFn()()
/**
* @desc 函数只执行一次
*/
function once(fn) {
let flag = false;
return function () {
if (!flag) {
flag = true;
return fn.apply(this, arguments);
}
};
}
const pay = once((res) =>{
console.log('res', res);
})
pay(10)
pay(10)
pay(10)
pay(10)