要查看实际问题,请参阅此 jsbin。单击按钮会触发buttonHandler()
,如下所示:
function buttonHandler() {
var elm = document.getElementById("progress");
elm.innerHTML = "thinking";
longPrimeCalc();
}
您会期望这段代码将 div 的文本更改为“thinking”,然后运行longPrimeCalc()
一个需要几秒钟才能完成的算术函数。然而,事实并非如此。相反,“longPrimeCalc”先完成,然后在运行完成后将文本更新为“thinking”,就好像两行代码的顺序颠倒了一样。
看起来浏览器并没有同步运行“innerHTML”代码,而是为其创建了一个新线程,该线程在其空闲时执行。
我的问题:
- 导致这种行为的幕后情况是什么?
- 我怎样才能让浏览器按照我期望的方式运行,即强制它在执行“”之前更新“innerHTML”
longPrimeCalc()
?
我在最新版本的 chrome 中对此进行了测试。