[問題] javascript:while迴圈問題

看板Web_Design作者 (tume209)時間8年前 (2017/07/26 18:25), 8年前編輯推噓0(0016)
留言16則, 2人參與, 最新討論串1/1
各位大大好~我是自學的新手 最近學到exec( )跟lastIndex,因此嘗試配合while迴圈,想寫一個函數能夠「匹配元素內文字,並返回每一次匹配後的lastIndex」, 卻遇到了完全搞不懂的狀況。 我將範例放在codepen裡:https://goo.gl/rJ7LX7 大制說明一下我的問題 ---- p2中得到的值:是我期待的結果。 p3中得到的值: 卻略過了第一次與第三次的exec( )匹配,推測是因為寫法不同, 造成迴圈的過程,第一次與第三次的exec( )已經匹配過了, 但我搞不懂是怎麼處理的… p4中得到的值: 卻造成瀏覽器崩潰…,同樣的我也不清楚原因… ------------------------- 以上可能很多名詞不正確,但若各位高手有空, 還請替我解惑,感謝再感謝… -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.15.187 ※ 文章網址: https://www.ptt.cc/bbs/Web_Design/M.1501064754.A.1DC.html ※ 編輯: tume209 (49.218.87.99), 07/26/2017 18:33:18

07/26 19:28, , 1F
p3 : 在while判斷的時候執行1 印出來執行2 LOOP
07/26 19:28, 1F

07/26 19:38, , 3F
p4 : res2 在宣告後是一個陣列 while(true)
07/26 19:38, 3F

07/26 19:38, , 4F
個人淺見
07/26 19:38, 4F
實在感謝t大,還熱心提供範例,嘗試了解了一下,是否可再勞煩確認我的理解orz var res; while(condition){ JScode } p2之所以能成功,是因為「condition中作的"res宣告"」,相當於「被藏起來的宣告」? 所以每一次執行前的判斷, 只會將「JScode內的res」當作while之前「沒有內容的var:res」囉? ※ 編輯: tume209 (1.160.164.46), 07/27/2017 01:12:50

07/27 11:11, , 5F
p2 的res 有值阿 你不是都印出來了XD
07/27 11:11, 5F

07/27 11:18, , 6F
看上面網頁回答的前言 exec在reg 有/g global 的時候
07/27 11:18, 6F

07/27 11:28, , 7F
所以p2 while執行第5次 res=null
07/27 11:28, 7F

07/27 11:31, , 8F
試試看console.log(res); 瀏覽器開F12
07/27 11:31, 8F

07/27 11:32, , 9F
發現原來 res 賦值後是 object
07/27 11:32, 9F
感謝回應~~但是可能是我表達不清楚,還是看不懂t大的回應orz 我這裡的疑問在於, 「為什麼p2 JScode中的res能避開"判斷時"而作的匹配?」 如您所說, p3的JS code內的exec()會因為判斷而作了一次匹配(您提的"判斷1執行2"), 但是,p2直接將「在condition中被賦值」的res帶入JS code, 卻能避開判斷時作的匹配(判斷x執行1)!? 這原因究竟是甚麼? 而經過您提醒,嘗試以console.log(res)判斷, 得到無論在「condition內」或「while迴圈外」為res賦值, res都是object,那這樣不就更表示,p2、p3都應該有判斷1執行2的狀況嗎...?? ※ 編輯: tume209 (59.124.15.187), 07/27/2017 12:48:28

07/27 13:19, , 10F
p3 不是「避開」判斷時的匹配,而是第一次匹配在判斷時
07/27 13:19, 10F

07/27 13:19, , 11F
就「已經做過了」,所以大括號裡做的是第二次匹配
07/27 13:19, 11F

07/27 13:21, , 12F
condition 也會被執行
07/27 13:21, 12F
感謝q大也熱心回應! 是的,我已了解判斷condition時也會執行exec(),也因此我才有疑問。 為何「p2、p3擁有相同condition的前提」之下,得到的值卻不相同? p3會在condition判斷時進行1次exec(),執行時也進行1次exec(), 所以導致返回第2、4次的值(第5次停止)。 但p2不也應該在condition判斷時進行exec()執行嗎? 以結果看起來, 卻像是condition判斷時沒觸發exec(),只作了執行的exec()!!? 所以返回的值也是完整的第1、2、3、4次的值。 ※ 編輯: tume209 (59.124.15.187), 07/27/2017 13:55:19

07/27 13:56, , 13F
p2 和 p3 的 condition 中, exec() 執行完的 return 值
07/27 13:56, 13F

07/27 13:56, , 14F
存在 res,p2 直接取 res 的值,但 p3 又執行了一次 exe
07/27 13:56, 14F

07/27 13:56, , 15F
c() 啊(在 innerHtml 那行)
07/27 13:56, 15F

07/27 13:59, , 16F
筆誤,應該是 innerHTML
07/27 13:59, 16F
喔喔喔喔!了解! 感謝兩位這麼仔細教學,全然了解了! ※ 編輯: tume209 (59.124.15.187), 07/27/2017 14:47:01
文章代碼(AID): #1PU6uo7S (Web_Design)
文章代碼(AID): #1PU6uo7S (Web_Design)