Ваш код немного запутан, как написано.
Рассмотрим следующий формат:
(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
срабатывает на следующем следующем тике.В противном случае, fn
вызывается немедленно.
Чтобы узнать больше о цикле событий JavaScript, я настоятельно рекомендую это видео:
https://youtu.be/cCOL7MC4Pl0