工厂函数

它既不是类也不是构造函数,在 JavaScript 中,任何函数都可以返回一个对象,如果函数前面没有使用 new 关键字,却又返回一个对象,那这个函数就是一个工厂函数

偏函数

惰性函数

// 写一个 foo 函数,这个函数返回首次调用时的时间

// 普通方法
let t
const foo = () => {
  if (t) return t
  t = Date.now()
  return t
}
/**
 * 问题:
 *  1. 污染了全局变量
 *  2. 每次调用 foo 的时候都需要进行一次判断
 */

// 闭包
const foo = (() => {
  let t
  return () => {
    if (t) return t
    t = Date.now()
    return t
  }
})()
/**
 * 问题:
 *  1. 每次调用 foo 的时候都需要进行一次判断
 */

// 函数对象
let foo = () => {
  if (foo.t) return foo.t
  foo.t = Date.now()
  return foo.t
}
/**
 * 问题:
 *  1. 每次调用 foo 的时候都需要进行一次判断
 */

// 惰性函数
let foo = () => {
  let t = Date.now()
  foo = () => {
    return t
  }
  return foo()
}