我们使用显示模块模式将内容组织到“命名空间”中。一些初始化代码(用于 jQuery Validation 插件)只能在文档加载后调用。
Namespace.Foo.Bar = (function($) {
var init = function() {
$(function() { // <--- within DOM ready wrapper it never runs
$.validator.setDefaults({
// ...
});
});
(function(){ // <--- but within an IIFE it will run
$.validator.setDefaults({
// ...
});
})();
};
init();
// public functions/variables
return {
};
}(jQuery));
当$.validator.setDefaults
位在 DOM 就绪包装器中时,它永远不会被调用,但当它在 IIFE 中时,它会被调用。
为什么?标记某些模块代码以在 DOM 准备好后运行的“最佳”方法是什么?
编辑:使示例代码更能说明问题