在下面的代码中,目标是如果文档准备就绪,则 doSomething();否则,如果正在加载文档,则将 doSomething()附加为事件处理程序准备好文件的地方。
我想知道(d.readyState=='loading')
之后是否存在上下文切换/中断,是否可能是因为在加载DOM之后附加了处理程序,所以fn()
将永远不会被调用。
代码如下:
(function(fn){
var d=document;
(d.readyState=='loading') ? d.addEventListener('DOMContentLoaded',fn) : fn();
})
(function(){
doSomething();
});
如果是实际问题,那么正确的解决方案是什么。 否则,为什么不能发生?
答案 0 :(得分:2)
您的代码在编写时有点混乱。
请考虑以下格式:
(function(fn){
var d=document;
d.readyState=='loading'
? d.addEventListener('DOMContentLoaded',fn)
: fn();
})(function(){
alert("hello")
});
以下是IIFE的自变量。
function(){
alert("hello")
}
因此,fn
引用了上述函数。
鉴于上述情况,只要fn
被触发并且同一时刻没有运行时错误,就可以保证DOMContentLoaded
被调用。
如果document.readyState
是loading
,则将在同一刻度上添加事件处理程序。最早,DOMContentLoaded
会在 next 刻度上触发。否则,将立即调用fn
。
要了解有关JavaScript事件循环的更多信息,我强烈推荐此视频: