首页 > 解决方案 > 嵌套循环返回限制

问题描述

我正在为在线课程进行测验。

对于这个测验,您将创建一个名为 buildTriangle() 的函数,该函数将接受输入(最宽处的三角形)并返回三角形的字符串表示形式。请参阅下面的示例输出。

构建三角形(10);

返回
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *

我用这个函数解决了它:

function buildTriangle(length) {
    var line = "";
    var triangle ="";
    for (h = 1; h <= length; h++) {
        makeLine(length);
        function makeLine(length) {line += "* ";}
        triangle += line + "\n";
    }
    return triangle
}

buildTriangle(10));

成功返回:

*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *

然而,在得到这个解决方案之前,我尝试了这个:

function buildTriangle(length) {
    var line = "";
    var triangle ="";
    for (h = 1; h <= length; h++) {
        makeLine(length);
        function makeLine(length) {
            for (i = 1; i <= length; i++) {
                line += "* ";
            }
        }
        triangle += line + "\n" 
    }
    return triangle
}

console.log(buildTriangle(10));

哪个返回了这个:

* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

为什么这个嵌套makeLine函数不能正常循环(即从1开始),而是每次产生10?有没有办法强制循环正常运行(1、2、3、4、5 ...)?为什么这种嵌套不起作用?

标签: javascriptfunctionloops

解决方案


因为您有一个makeLine从 1 到length(含)循环的循环,并且您+=在添加到行时使用。因此line,每次您"* "调用.lengthmakeLine


旁注:根本没有理由拥有该makeLine功能。但是,如果您要拥有它,请不要在for. 这曾经是无效的(尽管浏览器 JavaScript 引擎在某些情况下可以容忍它)。它不再无效,但这里没有充分的理由。

旁注2:您的代码正在成为我所说的隐式全局恐怖的牺牲品。您需要声明您的h(and i) 变量。


推荐阅读