JavaScript生成三角形代码中return未终止循环及两段代码结果差异疑问
问题1:return为什么没有终止for循环
return语句确实会在执行时立刻终止所在函数并返回结果,但你给出的原版代码中,return x 是写在for循环的外部的:
function buildTriangle (length){ var x = "" // 整个for循环会先完整执行完 for (j = 1; j <= length; j++){ x += makeLine(j); } // 循环全部结束后才会走到这行return,自然不会打断循环 return x }
只有把return写在for循环的花括号内部时,才会在执行到return时提前中断循环、退出函数。
问题2:修改后运行结果差异的原因
两段代码的核心差异是对变量x的赋值逻辑不同:
- 原版使用
x += makeLine(j):这是累加赋值,每次循环都会把新生成的一行星号拼接到x原有内容的末尾,循环结束后x会保存从1个星号到10个星号的所有行的拼接结果,也就是完整的三角形。 - 修改版使用
x = makeLine(j):这是覆盖赋值,每次循环都会清空x之前的内容,直接替换成当前生成的行。循环执行到最后一次时j等于10,x只会保留makeLine(10)的执行结果,也就是单独一行10个星号的内容,和原版的完整三角形结果自然不同。
内容的提问来源于stack exchange,提问作者Nora
相关产品推荐
相关产品推荐

