作者d13751200344 (三更灯火五更鸡)
看板Ajax
标题[问题] JS loop问题
时间Fri Mar 4 13:10:45 2022
各位版上的前辈先进们好,小弟目前正在学习JS,做题的时候发现有一题让我百思不解, 想请问各位大大们:
关於此题我一直搞不懂,
function makeStars(n){
let result = "*";
for (let i = 2; i <= n ; i++) {
let s = "\n";
for (let j = 0; j < i ; j++) {
s = s + "*";
}
result = result + s;
}
console.log(result);
}
makeStars(3);
————————————————————
第九行的 result += s 被包在第一个for loop里面,为什麽不会被重复?
正确答案是*\n**\n*** (第一个*是let result="*"造成)
但我不了解为什麽答案不是*\n***\n***呢? (第一个*、第四个* 是let result="*"造成)
我的思路是: 当n=3时,第一个for loop会被执行两次(「i=2」与「i=3」时)、第二个for loop会被执行共五次(「i=2」时执行2次 + 「i=3」时执行3次);
也就是说,当n=3的前提下,i=2时触发两次第二个for loop (结果为\n**)、触发一次「r esult += s」,得到「*\n**」;接着在i=3时触发三次第二个for loop (结果为\n***)、 又触发一次「result += s」,得到「*\n***」;
而"*\n**"+"*\n***" = "*\n***\n***" ;但是正确答案却是*\n**\n***,是不是我的思
路哪边有问题?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.72.118.151 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1646370647.A.664.html
1F:→ tino1991: i=3的时候, result=*\n**, s=\n*** 03/04 13:51
2F:→ d13751200344: 楼上大大,i=3时s=\n*** 这段如您所说;但接下来会 03/04 16:35
3F:→ d13751200344: 触发result+=s ,导致result = *\n***呀? 03/04 16:35
4F:→ tino1991: "*\n**" + "\n***" = "*\n**\n***" 这样 03/04 17:55
5F:→ tino1991: 我看到文中说 (第一个*、第四个* 是let result="*"造成) 03/04 17:56
6F:→ gasbomb: 有关loop的问题我一律建议去debugger一步一步看 03/04 17:57
7F:→ tino1991: let result 在for 回圈外不会再被执行到 03/04 17:57
8F:→ gasbomb: 你第二行又没被loop包到只有执行一次 03/04 17:58
9F:→ tino1991: 对, 直接 console 印出来看比较方便 03/04 17:59
10F:→ d13751200344: 了解了感谢各位大大! 03/04 18:31