Javascript 嵌套的$(document).ready()和$(window).load()事件之间的差异

Javascript 嵌套的$(document).ready()和$(window).load()事件之间的差异,javascript,jquery,Javascript,Jquery,我知道这些州之间的基本区别,但在我们的一个项目中出现了一个奇怪的问题 jQuery(document).ready(function () { console.log('Dom is ready'); jQuery(document).ready(function () { console.log('Inner Dom ready'); }); }); 结果: Dom is ready Inner Dom ready Window Loaded 现在,无论何

我知道这些州之间的基本区别,但在我们的一个项目中出现了一个奇怪的问题

jQuery(document).ready(function () {
   console.log('Dom is ready');
   jQuery(document).ready(function () {
       console.log('Inner Dom ready');
   });
});
结果:

Dom is ready
Inner Dom ready
Window Loaded
现在,无论何时,只要我调用
document.ready()
,它都会执行其处理程序,这很好

但是如果你看这个

jQuery(window).load(function () {
    console.log('Window Loaded');
    jQuery(window).load(function () {
        console.log('Inner window load');
    });
});
结果:

Dom is ready
Inner Dom ready
Window Loaded
为什么内部窗口加载从未执行其处理程序,即使窗口已加载

感谢您的评论和回答,但我只是想知道它们在内部是如何工作的,我同意jQuery(window).load()事件只触发一次,因此没有机会执行任何其他加载事件处理程序,那么为什么这个规则不应用于jQuery(document).ready()。它是否设置了某种标志或什么,并在每次调用它时进行检查。

$(document).ready()
在加载HTML文档和DOM就绪时执行。因此内部
ready()
调用,因为DOM已经准备就绪
ready()
只检查当前状态,不与以前的状态进行比较。这样的条件

if state=="ready" then invoke latest $(document).ready();
此条件适用于所有级别的
ready()
方法

但是

$(window).load()在完全加载整个页面(包括所有帧、对象和图像)时执行。简单地说,
load()
在状态从另一个状态更改为已加载状态时执行。当状态从另一个状态加载时,首先执行
load()
,但未检测到内部
load()
,并且状态发生变化,因此不会执行

if (is_state_changed=true AND current_state=="ready" AND current_state !== previous_state) then invoke latest $(window).load();

上述条件适用于第一个/外部
load()
,但不适用于内部
load()
,因为内部
load()的状态没有改变(保持不变)

看看这个:你到底为什么要将它们嵌套?我想这是因为
window.onload
只能调用一次,但是jQuery将函数封装在某个东西中,因此只能在窗口实际加载时调用它,而不是稍后,这就是内部调用不起作用的原因。而
DOMContentLoaded
和jQuery的
ready
将在任何时候被调用,只要文档已经加载。我已经在修改后的答案中解释了两者的逻辑