函数是一等公民包含三个特征:
- 函数可以存贮在变量中
- 函数可以作为参数
- 函数可以作为返回值
因为Javascript
中函数就是一个普通对象(可以通过new Function()
),所以我们可以把函数存储到变量/数组中,它还可以作为另一个函数的参数和返回值,甚至我们可以在程序运行过程时通过 new Function('alert(1)')
来构造一个新函数;
// 1、函数可以存储在变量中
const fn = (msg) => alert(msg)
// 2、函数可以做为另一个函数的参数
function forEach(arr, fn) {
for(item of arr) {
fn(item)
}
}
// 3、函数可以作为另一个函数的返回值
function once (fn) {
let done = false
return function () {
if (!done) {
done = true
return fn.apply(fn, arguments)
}
}
}
const pay = once(function(money){
console.log(`支付了:${money}元`)
})
console.log(pay(5))
console.log(pay(15))