由于上下文切换,函数永远不会被调用吗?

时间:2019-02-19 14:42:47

标签: javascript dom dom-events

在下面的代码中,目标是如果文档准备就绪,则 doSomething();否则,如果正在加载文档,则将 doSomething()附加为事件处理程序准备好文件的地方。

我想知道(d.readyState=='loading')之后是否存在上下文切换/中断,是否可能是因为在加载DOM之后附加了处理程序,所以fn()将永远不会被调用。

代码如下:

(function(fn){
    var d=document;
    (d.readyState=='loading') ? d.addEventListener('DOMContentLoaded',fn) : fn();
})

(function(){
    doSomething();
});

如果是实际问题,那么正确的解决方案是什么。 否则,为什么不能发生?

1 个答案:

答案 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.readyStateloading,则将在同一刻度上添加事件处理程序。最早,DOMContentLoaded会在 next 刻度上触发。否则,将立即调用fn

要了解有关JavaScript事件循环的更多信息,我强烈推荐此视频:

https://youtu.be/cCOL7MC4Pl0