我在Events and timing in-depth中找到了一篇文章,本文中有一个例子:
function run() {
var div = document.getElementsByTagName('div')[0]
for(var i=0xA00000;i<0xFFFFFF;i++) {
div.style.backgroundColor = '#'+i.toString(16)
}
}
说:
在大多数浏览器中,在脚本完成之前,或者直到脚本完成后才会看到任何内容 浏览器会暂停一条“脚本也在运行”的消息 长”。
这意味着在执行这些代码时我无法看到动画。
但为什么?我不太明白这个,代码执行得太快了吗?或者在执行代码后完成渲染作业?
为什么添加setTimeout
可以显示动画?
答案 0 :(得分:1)
当run()
功能正在执行时,浏览器不会更新页面。它一直等到函数完成执行。但是,setTimeout
以递增的方式运行 - 浏览器在每次运行后更新页面。
您问题中链接的摘要解释得很清楚:
大多数浏览器都使用单线程来实现UI和JavaScript 被同步调用阻止。所以,JavaScript执行阻止了 渲染。
除DOM事件外,异步处理事件。
setTimeout(..,0)技巧非常有用。它允许:
让浏览器呈现当前更改。避免“脚本正在运行 太久了“警告。更改执行流程。 Opera在很多方面都很特别 关于超时和线程的地方。