PHP
·
发表于 5年以前
·
阅读量:8312
浏览器同时要做很多事,这些事情以队列的方式存在,执行JavaScript只是其中之一,setTimeout(fn, 0)表面上看是立即执行的意思,但实际上只是在浏览器事件队列中添加了一个新的事件,由于队列是先进先出,所以fn会等等到当前队列中的事件执行完后再执行。由于JavaScript的定时器回调函数是异步执行的,所以产生的效果就是等页面上同步事件(包括页面渲染与同步JS代码)执行完之后再执行。
一个简单的示例:
<script type="text/javascript">
//one
document.getElementById("imgTest").style.borderBottom="5px solid #000";
//two
setTimeout(function(){
document.getElementById("imgTest").style.borderBottom="5px solid #000";
}, 0);
</script>
<img src="http://jscode.chinacxy.com/img_lib/m_400_600_01.jpg" id="imgTest" alt=""/>
one会报错,因为页面执行到这里时还没有img,但two却可以。