gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:16:00 26 4
gpt4 key购买 nike

在以下代码中,目标是如果文档已准备好,则执行 doSomething(),否则,如果文档正在加载,则附加 doSomething() 作为事件处理程序文件已准备就绪。

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

代码如下:

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

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

如果这是一个实际问题,那么正确的解决方案是什么。不然的话,为什么不能实现呢?

最佳答案

您的代码写得有点困惑。

考虑以下格式:

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

下面是 IIFE 的一个参数.

function(){
alert("hello")
}

因此,fn 引用了上述函数。

鉴于上述情况,只要 DOMContentLoaded 触发并且同一时间点上没有运行时错误,fn 就一定会被调用。

如果document.readyState正在loading,那么事件处理程序将被添加到同一个tick上。最早,DOMContentLoaded 会在下一个时间点触发。否则,立即调用 fn

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

https://youtu.be/cCOL7MC4Pl0

关于javascript - 由于上下文切换,函数可能永远不会被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54768828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com