为何for循环内的return始终返回fact初始值1?阶乘函数问题
问题原因分析
你遇到的问题核心是for循环里的return语句直接终止了整个函数,根本没让循环完成所有迭代:
错误代码的执行流程
看这段有问题的代码:
const factorial = function(a) { let fact=1; if(a===0){ return 1; } else{ for(let i=1; i<=a; i++){ fact*=i; return fact; // 这里的return是关键问题 } return fact } return fact; };
当你传入a=5这类值时,代码进入else分支后:
- 第一次循环i=1,执行
fact *=i→fact = 1*1 =1 - 紧接着执行
return fact,这会直接终止整个factorial函数,并返回当前的fact值(也就是1) - 循环的后续迭代(i=2到i=5)根本没机会执行,所以不管a是多少(只要不是0),函数都会在第一次循环就返回1
正确代码的执行流程
去掉循环里的return后:
const factorial = function(a) { let fact=1; if(a===0){ return 1; } else{ for(let i=1; i<=a; i++){ fact*=i; // 没有return,循环会完整执行 } return fact } return fact; };
此时循环会完整跑完从i=1到i=a的所有步骤:
- 比如a=5时,fact会依次变成1→2→6→24→120
- 循环结束后,才执行
return fact,返回正确的阶乘结果
简单说:return语句的作用是立即结束当前函数,把值返回给调用者,所以放在循环里会打断循环的执行。
内容的提问来源于stack exchange,提问作者kozuba
相关产品推荐
相关产品推荐

