You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于回调函数与checkConsistentOutput函数执行结果的疑问

关于回调函数与checkConsistentOutput函数执行结果的疑问

别着急,我来一步步给你拆解清楚,你肯定能瞬间明白的~

首先咱们先把完整代码贴出来,方便对照着看:

const addTwo = num => { return num + 2; }
const checkConsistentOutput = (func, val) => {
  const checkA = val + 2;
  const checkB = func(val);
  return checkA === checkB ? func(val) : 'inconsistent results';
}
console.log(checkConsistentOutput(addTwo, 5)); // 输出7

我来帮你逐行捋一遍执行过程,你就懂为什么checkA和checkB会相等了:

  • 先看addTwo函数:这是个箭头函数,接收参数num后返回num + 2。所以当你调用addTwo(5)时,结果就是5 + 2 = 7,这个逻辑你肯定没问题对吧?
  • 再看checkConsistentOutput函数,它的第一个参数func是一个函数(也就是咱们说的回调函数),第二个参数是数值val。当我们调用checkConsistentOutput(addTwo, 5)时:
    1. const checkA = val + 2;:这里val是传入的5,所以checkA = 5 + 2 = 7。
    2. const checkB = func(val);:这里的func就是我们传进去的addTwo,相当于把addTwo“托付”给了func这个变量。所以func(val)就等于直接调用addTwo(5),结果自然是7,所以checkB也是7。
    3. 最后一行的三元运算符:因为checkA(7)和checkB(7)完全相等,所以会返回func(val)也就是7,这就是控制台输出7的原因。

你之前的困惑点应该是没搞明白“把函数作为参数传递”的逻辑——func就是addTwo的“别名”,在checkConsistentOutput里调用func(val),和你在外面直接写addTwo(val)是完全一样的操作,结果当然也会一模一样。

举个反例你就更清楚这个函数的作用了:如果我们传一个“不靠谱”的函数进去,比如:

const wrongAdd = num => num + 3;
console.log(checkConsistentOutput(wrongAdd, 5)); // 会输出'inconsistent results'

这时候checkA还是7,但checkB是wrongAdd(5)=8,两者不相等,就会返回错误提示。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:40:28