如何从子函数中触发父函数上下文的返回操作
解决方案
要实现子函数的判断结果影响父函数的执行流程,你不能直接让子函数的return终止父函数,得让子函数返回一个状态标记,父函数根据这个标记决定是否继续执行后续代码。具体修改如下:
1. 改造blockLetters函数
让它返回布尔值:当检测到非数字字符时返回true(表示需要阻止父函数后续操作),否则返回false。
const blockLetters = lastD => { // 判断条件:存在字符且不是数字 return lastD !== undefined && isNaN(Number.parseInt(lastD)); };
2. 在handleCVC中根据返回值控制流程
调用blockLetters后,若返回true则直接return终止父函数,跳过setcvc;否则正常执行。
const handleCVC = e => { e.preventDefault(); let newcvc = e.target.value; let newcvcArr = newcvc.split(""); let newLength = e.target.value.length; let lastNewDigit = newcvcArr[newLength - 1]; // 调用子函数并判断返回值 if (blockLetters(lastNewDigit)) { return; // 满足条件则终止父函数,不执行后续setcvc } setcvc(newcvc); };
逻辑说明
blockLetters现在只负责检测逻辑,返回检测结果,把是否终止的控制权交还给父函数。- 父函数通过
if判断子函数的返回值,决定是否执行后续代码,这是JavaScript中控制跨函数执行流程的常规方式——因为子函数无法直接中断父函数的执行,只能通过返回值传递状态。
内容的提问来源于stack exchange,提问作者Nicolas Fredsny
相关产品推荐
相关产品推荐

