如何让JavaScript控制台不显示函数的返回值?
解决函数嵌套调用重复输出的问题
首先明确问题根源:直接在控制台执行compile("value","value")时,控制台会自动打印函数的返回值,再加上函数内部的console.log输出,就会出现两次重复内容;而嵌套调用decompile(compile(...))时,compile的返回值会直接传给decompile,不会被控制台打印,所以只会显示一次console.log的内容。
给你几个可行的解决方案:
方案一:调用时用void抑制返回值输出
这是最简单可靠的方法,不需要修改函数本身,直接在调用时加上void关键字,就能阻止控制台打印函数的返回值:
void compile("value", "value");
嵌套调用时不需要加void,compile的返回值会正常传递给decompile,不会影响功能:
decompile(compile("value", "value"));
方案二:给函数加参数控制返回行为
如果不想每次调用都写void,可以给函数加一个可选参数,用来控制是否返回结果:
function compile(r, b, returnResult = true){ // 这里写你的输入处理逻辑,生成enc const enc = "处理后的混淆字符串"; console.log(enc); // 根据参数决定返回值 return returnResult ? enc : undefined; }
- 直接调用时传
false,控制台不会打印返回值:compile("value", "value", false) - 嵌套调用时默认传
true,正常返回结果给上层函数:decompile(compile("value", "value"))
方案三:通过调用栈判断嵌套(不推荐)
可以利用错误栈的深度判断函数是否被嵌套调用,自动决定返回值,但这种方法依赖运行环境的栈结构,兼容性较差:
function compile(r, b){ // 输入处理逻辑 const enc = "处理后的混淆字符串"; console.log(enc); // 拆分调用栈,判断深度 const stackLines = new Error().stack.split('\n'); // 不同环境的栈深度阈值可能不同,需要自行调整 return stackLines.length > 3 ? enc : undefined; }
优先推荐方案一,操作简单且不影响原有函数逻辑,完全满足你的需求。
内容的提问来源于stack exchange,提问作者TullyYT
相关产品推荐
相关产品推荐

