关于回调函数与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)时:const checkA = val + 2;:这里val是传入的5,所以checkA = 5 + 2 = 7。const checkB = func(val);:这里的func就是我们传进去的addTwo,相当于把addTwo“托付”给了func这个变量。所以func(val)就等于直接调用addTwo(5),结果自然是7,所以checkB也是7。- 最后一行的三元运算符:因为
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
相关产品推荐
相关产品推荐

