Javascript jQuery对事件和触发器的顺序

Javascript jQuery对事件和触发器的顺序,javascript,jquery,events,triggers,Javascript,Jquery,Events,Triggers,见下文: $('body').on('whyhellothere', function(){ console.log('done...'); }); $('body').triggerHandler('whyhellothere'); 此代码段返回: done... 如果我们颠倒顺序: $('body').triggerHandler('whyhellothere'); $('body').on('wh

见下文:

$('body').on('whyhellothere', function(){

    console.log('done...');                                     

});

$('body').triggerHandler('whyhellothere');
此代码段返回:

done...
如果我们颠倒顺序:

$('body').triggerHandler('whyhellothere');

$('body').on('whyhellothere', function(){

    console.log('done...');                                     

});

此代码段不返回任何内容。为什么会这样

如果你在森林里大喊大叫,然后我来了,我什么也听不见,是吗

您正在事件触发后注册事件处理程序。已注册的处理程序只能侦听在开始侦听后触发的事件


这是一个简单的物理过程:Javascript是自上而下处理的。它不会将您的
on
调用识别为应该先处理的顶级定义。因此,您正在调用一个触发处理程序的函数,该函数调用将查找该事件的所有当前注册的处理程序,其中没有处理程序,然后将它们全部调用(其中没有处理程序)。然后向该事件侦听器添加一个新的处理程序。此后的任何调用都将迭代处理程序列表(现在是1)并调用它们。

很好的类比:)我现在必须稍微重构代码,这会使代码比保持顺序更难理解。再次感谢,我现在明白了。@Bilbobagkins-不过你应该问问甘道夫。我相信他能让我在我到达之前听到你的喊声……他总是很忙,没有时间陪我:)这很有道理。干杯