关于最后的立即执行函数和d.onreadystatechange=function(){}不知这样理解是否有错?
这是我的理解,请大神来指正,否则我真的不知道该怎么理解这些代码了。(前边一些代码略去)首先开始立即执行函数,在这个立即执行函数里是DOM树创建完成的判断(它和window.onload有很大区别,前者是创建DOM树,onload是不仅树可能创建完了,还有可能正在加载外部信息),如果DOM树创建完成跳过try catch执行init()也就是css样式设置为红色,如果没有创建完毕,则执行try中的doSCroll捕获错误并执行catch中的setTimeout,接着利用return跳过该立即执行函数,接下来浏览器继续加载,而代码执行到d.onreadystatechange=function(){}进行监听,这种情况下假设30ms进入立即执行函数而48msDOM树建立完毕,还差18msDOM树才能建好,于是执行了Timesetout并跳出了立即执行函数,再假设49ms网页加载完毕,而刚好进入d.onreadystatechange=function(){}的时间是49ms,即dom树建立完毕网页加载完毕;由于49ms<Settimeout中的50ms因而执行了d.onreadystatechange=function(){}中的init函数,于是这是在网页加载完毕的前提下将CSS设置为红色。情况二:我们依旧假设48msDOM树建立完毕,但是网页加载完是51ms,进入立即执行函数的时间是30ms此时30ms<48ms<50ms这意味DOM树没有建立,继续进入到d.onreadystatechange=function(){}时间为48ms,由于网页未加载完,但时间已经走入到了50ms开始执行setTimeout这个递归,此时50ms>48ms(另一边网页加载也在进行)DOM树已经建立完毕,这时执行立即调用函数里的init(),而后网页加载完成了。
也就是说2个init()分别对应DOM树建立好了,而网页不一定加载完的情况下调用init(),和网页以及DOM树都加载好了后调用init()函数这2种大情况?
闲话太多,望大神给个评价我的理解方式是否正确?