技术问询:如何在函数调用3次后返回true值
实现函数被调用3次后返回true的方案
我来帮你搞定这个需求!要实现一个函数被调用3次后返回true,核心思路就是用一个计数器来追踪调用次数,每次调用时递增计数,当计数达到3时返回true,之前的调用返回false(如果需要后续每3次都返回true,也可以调整逻辑)。
方案一:闭包实现(推荐,避免全局变量污染)
闭包能把计数器封装在函数内部,不会污染全局作用域,是更优雅的实现方式:
function createThreeCallChecker() { let callCount = 0; return function() { callCount++; // 第3次调用返回true,其余返回false return callCount === 3; // 如果需要每3次调用都返回true(比如第3、6、9次),可以改成: // return callCount % 3 === 0; }; } // 使用示例 const checkThreeCalls = createThreeCallChecker(); console.log(checkThreeCalls()); // false(第1次调用) console.log(checkThreeCalls()); // false(第2次调用) console.log(checkThreeCalls()); // true(第3次调用)
方案二:全局变量实现(简单但不推荐)
如果你的场景非常简单,也可以用全局变量计数,但要注意变量名不要和现有代码冲突:
let callCounter = 0; function checkThreeCalls() { callCounter++; return callCounter === 3; } // 使用示例 console.log(checkThreeCalls()); // false console.log(checkThreeCalls()); // false console.log(checkThreeCalls()); // true
结合你现有代码的场景(比如按钮点击3次触发逻辑)
看你提供的代码里有$("#btnSave").click(...)的片段,假设你想让这个按钮被点击3次后返回true(触发特殊逻辑),可以这样整合:
// 先创建计数检查函数 const isThirdBtnClick = createThreeCallChecker(); $("#btnSave").click(function() { // 执行你原有的错误检查逻辑 hide_errors(); const hasError = error_check($("#someInput"), ".error_orient") || error_check($("#anotherInput"), ".error_short"); if (hasError) { return; // 有错误就终止执行 } // 判断是否是第3次点击 if (isThirdBtnClick()) { console.log("第3次点击,返回true!"); // 这里写你需要的特殊逻辑,比如提交特殊请求等 return true; } else { console.log("未到3次点击,执行原有保存逻辑"); // 执行原有保存逻辑 // ... return false; } });
另外,注意你提供的error_check函数有个小bug:else分支的代码没有用大括号包裹,会导致逻辑错误,建议修正为:
// error checking function(修正后) function error_check(data,_class){ if(data.val()=="" || data.val()==0){ data.parent().parent().addClass('has-error'); $(_class).show(); return true; } else { data.parent().parent().removeClass('has-error'); $(_class).hide(); return false; } }
如果不加else的大括号,不管if条件是否成立,$(_class).hide(); return false;都会执行,这会覆盖掉if分支里的错误提示显示操作,导致错误提示无法正常展示哦!
内容的提问来源于stack exchange,提问作者John David
相关产品推荐
相关产品推荐

