例如寫一個 sleep() 函數(shù)用來延時, 阻塞代碼執(zhí)行, 比如調(diào)用下面的代碼:function sleep(millisecond) { var start = new Date(); var end = start.getTime() + millisecond; while(true) {
if (new Date().getTime() > end) { break;
}
}
}function generateText() { var i = 0; for (i; i < 10; i++) {
(function(){ var n = i; document.body.appendChild(document.createTextNode(n));
sleep(100);
})();
}
}
generateText();想當(dāng)然的認(rèn)為, 上面一段代碼, 每 100ms 在 <BODY> 中加入一個內(nèi)容為索引值的文本節(jié)點(diǎn), 但是實(shí)際上, 整個內(nèi)容會在 1s 后一次性全部加載在瀏覽器中, 達(dá)不到想要的每 100ms 加載一次, 為什么會這樣呢?(setTimeout 是將任務(wù)加載到隊(duì)列里, 而不是阻塞程序的執(zhí)行, 所以達(dá)不到想要的效果, setInterval 不能滿足想達(dá)到的效果)
JavaScript 調(diào)用函數(shù)進(jìn)行 DOM 更新的機(jī)制是怎樣的?
Smart貓小萌
2018-08-28 12:19:23