1.程式碼
// 此時會觸發hashchange
location.hash = '/test'
window.addEventListener('hashchange', () => {
console.log('hashchenge')
})
// 此時不會觸發hashchange
location.hash = '/test'
setTimeOut(() => {
window.addEventListener('hashchange', () => {
console.log('hashchenge')
})
},0)
2.測試與結論
- 測試: 進入一個未繫結hahschange事件的網頁,在控制檯輸入以上程式碼
- 結論: 如果hahschange是同步的,則不應該觸發hashchange事件,但是觸發了,證明hashchange事件類似於React的setState,都是在下一個迴圈執行