[问题] JS loop问题

楼主: d13751200344 (callmedan)   2022-03-04 13:10:45
各位版上的前辈先进们好,小弟目前正在学习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***,是不是我的思
路哪边有问题?
作者: tino1991 (深白)   2022-03-04 13:51:00
i=3的时候, result=*\n**, s=\n***
楼主: d13751200344 (callmedan)   2022-03-04 16:35:00
楼上大大,i=3时s=\n*** 这段如您所说;但接下来会触发result+=s ,导致result = *\n***呀?
作者: tino1991 (深白)   2022-03-04 17:55:00
"*\n**" + "\n***" = "*\n**\n***" 这样我看到文中说 (第一个*、第四个* 是let result="*"造成)
作者: gasbomb (虚空雷神兽)   2022-03-04 17:57:00
有关loop的问题我一律建议去debugger一步一步看
作者: tino1991 (深白)   2022-03-04 17:57:00
let result 在for 循环外不会再被执行到
作者: gasbomb (虚空雷神兽)   2022-03-04 17:58:00
你第二行又没被loop包到只有执行一次
作者: tino1991 (深白)   2022-03-04 17:59:00
对, 直接 console 印出来看比较方便
楼主: d13751200344 (callmedan)   2022-03-04 18:31:00
了解了感谢各位大大!

Links booklink

Contact Us: admin [ a t ] ucptt.com