关于数组遍历函数findElement的逻辑疑问求助
关于findElement函数的逻辑疑问解答
你的代码如下:
function findElement(arr, func) { let num = 0; for (let i = 0; i < arr.length; i++) { if (func(arr[i]) === true) { return arr[i]; } } return undefined; } console.log(findElement([1, 2, 3, 4], num => num % 2 === 0))
疑问1:控制台仅输出2,为什么for循环不会继续执行并输出4?
- 函数中的
return语句具有终止函数执行的特性,一旦触发return,整个函数会立刻停止所有后续操作并退出。当循环到数组元素2时,传入的判断函数返回true,触发return arr[i],函数直接结束,循环自然不会继续遍历后面的元素,也就不会输出4。
疑问2:输出后为何不会执行后续代码返回undefined?
- 还是
return的终止特性在起作用:只要函数执行到任意一条return语句,就会带着返回值立刻退出函数,后续代码完全不会被执行。当函数返回2之后,已经彻底终止,后面的return undefined根本没有执行的机会。
疑问3:最初在循环内添加else {return undefined;}但无效,必须将return undefined放在循环外,这是为什么?
- 如果把
return undefined放在循环的else分支里,第一次循环时,数组第一个元素1不满足判断条件,会直接触发else里的return,函数立刻终止,根本轮不到检查后面的2、3、4。只有把return undefined放在循环外面,才能保证循环完整遍历整个数组,确认所有元素都不满足条件后,再返回undefined。
内容的提问来源于stack exchange,提问作者Wattlebird
相关产品推荐
相关产品推荐

