javascript - 嵌套循环返回限制
问题描述
我正在为在线课程进行测验。
对于这个测验,您将创建一个名为 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 ...)?为什么这种嵌套不起作用?
解决方案
因为您有一个makeLine
从 1 到length
(含)循环的循环,并且您+=
在添加到行时使用。因此line
,每次您"* "
调用.length
makeLine
旁注:根本没有理由拥有该makeLine
功能。但是,如果您要拥有它,请不要在for
. 这曾经是无效的(尽管浏览器 JavaScript 引擎在某些情况下可以容忍它)。它不再无效,但这里没有充分的理由。
旁注2:您的代码正在成为我所说的隐式全局恐怖的牺牲品。您需要声明您的h
(and i
) 变量。
推荐阅读
- avr - 使用 AVR 汇编器将两个 16 位数字相乘
- java - 如何以高效的方式快速创建多个对象?
- c# - 无法获取相关表的逻辑
- heroku - Heroku 提供 'Picked up JAVA_TOOL_OPTIONS',并将 JMX 设置为 'true' 并没有阻止它
- php - 仅在从php插入数据后如何显示表格
- spring-boot - 由于 RabbitServiceAutoConfiguration,Spring-boot App 无法部署到 PCF
- python-3.x - 无法导入 PySimpleGUI
- php - Laravel 验证 - 禁止请求参数的规则
- java - 具有最大创建日期的休眠条件 createalias
- angular - 在多个位置返回相同的 html 而不会重复相同的组件选择器角度 2+