18-检验闭包是否真正理解?


 实现:

function fun(...args) {
  if (args[2]) {
    console.log("exec");
  }
  return args[0];
}
function memo(fn) {
  var temp = [];
  var flag = true;
  //return出去的这个函数其实就是fun2
  return (...arg) => {
    for (let val of temp.values()) {
      if (val.join(",") === arg.join(",")) {
        flag = false;
      }
    }
    temp.push(arg);
    let res = fn.apply(this, [...arg, flag]);
    return res;
  };
}

const fun2 = memo(fun);
console.log(fun2(1, 2)); // 输出 exec 返回 1
console.log(fun2(2, 2)); // 输出 exec 返回 2
console.log(fun2(1, 2)); // 没有输出 仅返回 1
console.log(fun2(2, 2)); // 没有输出 仅返回 2
原文地址:https://www.cnblogs.com/haoqiyouyu/p/14926839.html