实现一个只执行一次的函数

222 阅读1分钟

题目 once 描述 _.once(func)可以用来缓存结果使得原函数至多被调用一次。

能否自己实现一个once()

function func(num) {
  return num
}

const onced = once(func)

onced(1) 
// 1

onced(2)
// 1,因为已经调用过了,前一次的结果被直接返回

答案

function once(func) {
  let flag = Symbol();
  let pre = flag;
  return function (...rest) {
    if (pre == flag) {
      return pre = func.apply(this, rest);
    } else {
      return pre;
    }
  }
}