首先Vue 在更新 DOM 時(shí)是異步執(zhí)行的,也就是說(shuō)數(shù)據(jù)變了,DOM不會(huì)立即改變,那么我們是如何知道DOM什么時(shí)候會(huì)改變呢?
也就是說(shuō)如何知道異步后的觸發(fā)時(shí)機(jī)呢? 可以通過(guò)nextTick方法,這個(gè)方法在源碼內(nèi),先監(jiān)聽(tīng)是否具備Promise.then,利用promise來(lái)監(jiān)聽(tīng),如果當(dāng)前環(huán)境不支持promise,那么就降級(jí)采用MutationObserver,如果MutationObserver不支持的話(huà),那么就降級(jí)采用setImmediate,如果setImmediate不支持的話(huà),那么就使用setTimeout(fn, 0)。
所以說(shuō)nextTick和setTimeout區(qū)別總結(jié)就是:nextTick會(huì)先嘗試使用promise、MutationObserver、setImmediate這些技術(shù)去監(jiān)聽(tīng),如果都不支持才會(huì)采用setTimeout