我不太了解javascript中的setTimeout和线程

时间:2013-06-14 10:10:07

标签: javascript animation settimeout

我在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可以显示动画?

1 个答案:

答案 0 :(得分:1)

run()功能正在执行时,浏览器不会更新页面。它一直等到函数完成执行。但是,setTimeout以递增的方式运行 - 浏览器在每次运行后更新页面。

您问题中链接的摘要解释得很清楚:

  

大多数浏览器都使用单线程来实现UI和JavaScript   被同步调用阻止。所以,JavaScript执行阻止了   渲染。

     

除DOM事件外,异步处理事件。

     

setTimeout(..,0)技巧非常有用。它允许:

     

让浏览器呈现当前更改。避免“脚本正在运行   太久了“警告。更改执行流程。 Opera在很多方面都很特别   关于超时和线程的地方。