为何JavaScript中reduce回调的return语句未终止迭代执行?
为什么Array.reduce回调里有return却不会终止迭代?
先看你给出的代码:
const arr = [5,1,3,2,6]; const output = arr.reduce(function (acc, curr){ acc = acc + curr; return acc; }, 0); console.log(output);
这里的return并不是用来终止reduce的迭代,它是reduce工作机制里的核心环节:
- 每次回调执行后的return值,会作为下一次回调调用时的累加器(acc)参数传递进去
- reduce的迭代流程是由自身控制的,它会遍历数组的每一个元素,直到所有元素处理完毕才会停止,和回调里的return无关
- 你之前觉得return会终止循环或函数,是针对普通函数或for/while这类循环而言的——比如在for循环里的函数中写return,会直接终止整个函数,自然循环也停了;但reduce的回调是被reduce反复调用的独立执行单元,每次return只是结束当前这一次回调的执行,把结果交给reduce,让它继续处理下一个元素
如果非要提前终止reduce的迭代,只能通过抛出异常的方式强行中断,但这属于非常规用法,不推荐。
内容的提问来源于stack exchange,提问作者Gurleen Singh
相关产品推荐
相关产品推荐

