start.onclick=function newGame(){ location.reload(); flag = selectModel[0]; console.log(flag); };
我這裡本來要實現點擊後,刷新頁面及全域變數flag賦值。成功刷新,但未能成功賦值;如果把location.reload註解掉,就可以賦值。
location.reload()是異步嗎,賦值的時候,刷新還沒執行,而在賦值完成後進行了刷新操作,是這樣嗎?
你先了解 javascript 在瀏覽器中的生命週期。
重載頁面後,進入下一個生命週期,上一個週期裡賦值的flag,即使賦值成功,也被銷毀了。
頁面刷新,相當於丟掉一切重來,和重新開啟頁面無二。
什麼奇葩需求會要求點選連結刷新後還要修改全域下的flag?
可以把這個flag存到localdtorage
應該是同步才對,所以好一點的方式可以考慮這樣:
start.onclick=function newGame(){ flag = selectModel[0]; console.log(flag); setTimeout(() => { location.reload(); }); };
你先了解 javascript 在瀏覽器中的生命週期。
重載頁面後,進入下一個生命週期,上一個週期裡賦值的flag,即使賦值成功,也被銷毀了。
頁面刷新,相當於丟掉一切重來,和重新開啟頁面無二。
什麼奇葩需求會要求點選連結刷新後還要修改全域下的flag?
可以把這個flag存到localdtorage
應該是同步才對,所以好一點的方式可以考慮這樣: