实现:
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