以下示例构造:
function b(){
$('#a').on('blur', function(){
console.log('blur');
});
}
function c(){
$('#a').trigger('blur');
//pseudo: e.g. reading value from #a
}
b();
c();
现在我的问题是,是否会调用触发器同步执行回调,然后跳回函数“c”堆栈?或者是否可能在回调(异步操作)之前执行堆栈c中“触发”之后的某些代码?
答案 0 :(得分:1)
Javascript是单线程的,这意味着您的代码按顺序执行 - 更不用说调用是传递给事件处理程序的。
处理程序及其调用不是使执行异步的原因。它是事件本身,因为它们通常受到不可预测的外部因素的影响,如用户交互或网络延迟。在这里,事件以可预测的方式同步触发,因此执行的顺序实际上是一成不变的。
多线程将是一个不同的故事,例如:如果网络工作者参与。但事实并非如此。