javascript高级程序设计
中讲到DOMContentLoaded
事件时,有这样一段代码:
setTimeout(function(
//在此添加事件处理程序
),0);
目的是模拟DOMContentLoaded
的功能(IE8以下不支持DOMContentLoaded
),其解释是
在当前javaScript处理完成后立即运行这个函数。
该怎么理解?
DOM树的创建
,js,css,image等资源文件的加载
,setTimeout代码块
他们之间是怎样的一种执行顺序?
本来我也完全不知道为什么,直到一楼告诉了我真相。我就想说的是DOM树的构建不是完全同步的,因为JS的执行可能修改DOM,所以(在没有设置defer,async)等属性的<script>都是阻塞式的加载和执行。于是乎我就想到如下代码:
放到chrome下运行之后,setTimeout和我想的一样(虽然时间上试了好几次才成功0.0)不一定能够完全模拟DOMContentLoaded,特别是在你接下来要执行一段一个运算量很大需要很多时间的JS的时候。不过在时间间隔比较小的时候,我测试的setTimeout表现还是和DOMContentLoaded很一致的。