[問題] JS loop問題

看板Ajax作者 (三更燈火五更雞)時間2年前 (2022/03/04 13:10), 編輯推噓0(0010)
留言10則, 3人參與, 2年前最新討論串1/1
各位版上的前輩先進們好,小弟目前正在學習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://www.ptt.cc/bbs/Ajax/M.1646370647.A.664.html

03/04 13:51, 2年前 , 1F
i=3的時候, result=*\n**, s=\n***
03/04 13:51, 1F

03/04 16:35, 2年前 , 2F
樓上大大,i=3時s=\n*** 這段如您所說;但接下來會
03/04 16:35, 2F

03/04 16:35, 2年前 , 3F
觸發result+=s ,導致result = *\n***呀?
03/04 16:35, 3F

03/04 17:55, 2年前 , 4F
"*\n**" + "\n***" = "*\n**\n***" 這樣
03/04 17:55, 4F

03/04 17:56, 2年前 , 5F
我看到文中說 (第一個*、第四個* 是let result="*"造成)
03/04 17:56, 5F

03/04 17:57, 2年前 , 6F
有關loop的問題我一律建議去debugger一步一步看
03/04 17:57, 6F

03/04 17:57, 2年前 , 7F
let result 在for 迴圈外不會再被執行到
03/04 17:57, 7F

03/04 17:58, 2年前 , 8F
你第二行又沒被loop包到只有執行一次
03/04 17:58, 8F

03/04 17:59, 2年前 , 9F
對, 直接 console 印出來看比較方便
03/04 17:59, 9F

03/04 18:31, 2年前 , 10F
了解了感謝各位大大!
03/04 18:31, 10F
文章代碼(AID): #1Y8PzNPa (Ajax)
文章代碼(AID): #1Y8PzNPa (Ajax)