JavaScript for循环括号写法对findMultiples函数数组返回结果的影响解析
两种循环写法结果差异的核心原理
这个现象和括号本身没有直接关联,本质是两条JS基础规则叠加的结果:一是流程控制语句的作用范围判定逻辑,二是return语句会立即终止当前函数执行,不管后续循环有没有跑完。
第一种写法只返回单个元素的原因
你给第一种写法的for循环加了花括号{},按照JS语法,花括号包裹的所有代码都会被纳入循环体的执行范围。这种写法下,循环体包含两条连续逻辑:
- 把当前遍历到的倍数
ipush到数组中 - 执行
return arr直接终止函数、返回当前数组
循环第一圈就会走完完整的流程:取第一个满足条件的倍数i = integerpush进空数组,马上触发循环体内的return,直接结束整个函数的执行,后续所有循环迭代根本不会被触发,最终自然只能拿到只有单个元素的数组。
第二种写法能返回全量结果的原因
第二种写法的for循环没有加花括号{},按照JS语法规范:不带花括号的for/if/while这类流程控制语句,作用范围只会覆盖紧跟在它后面的第一条独立语句。
这种写法下,只有arr.push(i)这一句属于循环体内容,后面紧跟的return arr完全在循环的管辖范围之外。执行逻辑是:
- for循环独立跑完所有迭代,把所有不超过limit的倍数依次push进数组
- 等循环整体结束、没有可执行的迭代之后,才会执行循环外的
return arr,返回收集完成的全量数组
常见认知误区
不少人误以为第一种写法的return是写在循环外面的,本质是对“代码换行不改变作用域绑定”的规则不熟悉——只要代码落在循环对应的花括号范围内,不管中间空多少行、换几次行,都会被算成循环体的一部分。如果把第一种写法里的return arr移到花括号外面,最终的返回结果会和第二种写法完全一致。
内容的提问来源于stack exchange,提问作者JimmyStruthers
相关产品推荐
相关产品推荐

