JavaScript中多次return语句使用规则及嵌套return生效原理
关于JavaScript中return语句的使用说明
你看到示例代码里的两个return,不属于同一个语句块,是两个完全独立函数各自的返回语句,这是产生困惑的核心原因。
首先先明确一个基础规则:
return的作用范围永远绑定它直接所在的那个函数,只会终止当前函数的执行、把值返回给当前函数的调用方,跨函数作用域不生效。
示例代码拆解
你的示例代码如下:
function checkPositive(arr) { return arr.every(function(element) { return element > 0; }); }
这段代码里实际嵌套了两层独立函数,两个return各管各的:
- 内层的
return element > 0;属于传给arr.every()的匿名回调函数every是数组的遍历校验方法,它的运行逻辑是逐次调用传入的回调,根据回调返回的布尔值判断当前项是否符合要求:回调返回真值就继续校验下一项,返回假值就立刻终止遍历、最终返回false。如果漏写这个内层return,回调默认返回undefined(假值),every会直接判定校验不通过,逻辑完全错误。 - 外层的
return arr.every(...)属于checkPositive函数本身arr.every()执行完成后会得到一个最终的布尔结果(所有元素都为正则返回true,否则返回false),如果漏写这个外层return,checkPositive执行完不会把这个结果抛给外部调用方,默认返回undefined,外部拿不到校验结果。
什么时候需要写多个return?
分两类常见场景:
1. 函数嵌套场景
只要你的代码里存在嵌套的独立函数(包括回调函数、内部具名函数、箭头函数等),每个需要对外返回值的函数都要在自己的作用域内写对应的return,嵌套几层函数就可能出现几个return,互相之间不干扰。
举个最常见的漏写return的错误写法:
// 错误示例:漏写外层return,外部拿不到结果 function checkPositive(arr) { arr.every(function(element) { return element > 0; }); } console.log(checkPositive([1,2,3])) // 输出undefined,不符合预期
如果用箭头函数的简写形式可以省略return,本质只是语法糖,逻辑上还是存在返回值的:
// 箭头函数省略return的简写,和原示例逻辑完全一致 function checkPositive(arr) { return arr.every(element => element > 0); }
2. 单函数内分支提前返回场景
同一个函数内部也可以写多个return,一般用于分支判断时提前终止函数、减少代码嵌套。比如做参数合法性校验的时候,不满足条件就直接提前返回,不需要执行后续逻辑:
function checkPositive(arr) { // 传参不是数组的话,直接提前返回false,不走后续遍历逻辑 if (!Array.isArray(arr)) { return false; } return arr.every(element => element > 0); }
快速判断方法
写return的时候只要记住两个原则就不会写错:
- 先确认当前写的return属于哪个函数,它的返回值是给这个函数的直接调用方用的,不会传到外层函数去。
- 只要你希望函数在某个节点停止执行、把某个值传给调用方,就写return,不管是嵌套函数还是同函数的不同分支,没有“必须写几个”的固定规则,匹配逻辑需求即可。
内容的提问来源于stack exchange,提问作者Zak
相关产品推荐
相关产品推荐

