如何缓存已有update_scores函数并仅在click触发后执行新增逻辑
修正后的实现代码
// 初始化增强版update_scores update_scores = (function() { // 缓存原始未修改的update_scores函数 const cachedOriginal = update_scores; // 逻辑开关,初始状态为关闭,页面加载阶段不会触发附加逻辑 let enableExtraLogic = false; return function(...args) { // 先执行原函数的所有原有逻辑,保证原有功能不受影响 const returnVal = cachedOriginal.apply(this, args); // 仅在开关打开时执行附加逻辑 if (enableExtraLogic) { // 此处填写你需要附加的额外逻辑 } // 仅当调用时传入的第一个参数为true时,永久打开开关 if (args[0] === true) { enableExtraLogic = true; } return returnVal; }; })(); // 点击事件触发函数 function click() { // 传入true触发开关打开 update_scores(true); }
实现逻辑说明
- 初始状态下开关为关闭,页面加载阶段无论
update_scores被调用多少次,都不会执行附加逻辑,完全符合页面加载时不能触发附加逻辑的要求 - 只有
click()函数被主动调用后,才会将开关永久设置为开启状态,不会存在其他场景提前开启开关的可能 - 开关开启后,后续所有
update_scores的调用都会在执行完原有逻辑后,自动执行你定义的附加逻辑 - 完全保留原
update_scores的所有功能、传参规则、返回值,不会影响原有业务逻辑
内容的提问来源于stack exchange,提问作者MShack
相关产品推荐
相关产品推荐

