由来: 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)
