我正在从浏览器扩展中删除jQuery,我编写了一个简单的方法(应该可以跨浏览器工作)来检查DOM是否已加载。这是方法:
domReady: function(fn) {
if(document.readyState === 'interactive' || document.readyState === 'complete'){
if(fn && typeof fn === 'function'){
fn();
}
} else {
document.addEventListener("DOMContentLoaded", function() {
if(fn && typeof fn === 'function'){
fn();
}
});
}
}
这适用于简单的函数,例如domReady(pageLoad)
。我想知道是否可以将IIFE传递给domReady方法。我有一个jQuery代码块:
$(function(a){
return function(){
_Tools.drawBar(a);
}
}(action));
我不完全确定为什么这都包含在jQuery中并立即调用但我的猜测是在DOM加载时执行此代码并将此函数保持为私有。我想知道将此函数传递给domReady方法是否合法,如下所示:
domReady(function(a){
return function(){
_Tools.drawBar(a);
}
}(action));
当我在chrome dev控制台中尝试类似的东西时,我得到一个语法错误,说传递给domReady方法的函数不是函数,但函数仍然执行。有没有一种方法可以改变domReady方法来容纳IIFE?任何帮助将不胜感激。感谢