并发 - jquery处理程序是否保留队列?

时间:2012-02-29 16:32:55

标签: jquery concurrency thread-safety

我有这个简单的code

<a href="#" id="link1">Link1</a>
<a href="#" id="link2">Link2</a>​

$('#link1').click(function () {
    alert("First");
});

$('#link2').click(function () {
    alert("Second");    
});    
​

在&#34;遥控器&#34;用户点击Link1(第一个)而不是Link2的可能性,相差0,000000001 ms(我知道,这在现实中是不可能的,但只是要知道),是否有可能是#link2的警报在#link1的警报之前开始?

如果是,那么#link2的阻止处理程序的解决方案是什么,直到#link1的操作未完成?

1 个答案:

答案 0 :(得分:3)

  

“... #link2的警报是否可能在#link1的警报之前启动?”

没有。如果点击实际按该顺序发生,则将按该顺序触发事件。

JavaScript是单线程的,事件系统是同步。这可以保证第一次单击的同步部分必须在允许第二次单击事件之前完成。

如果第一次单击时将异步代码引入处理程序,则第一次单击仍将首先开始,但如果第一次单击的异步发生,则第二次单击可能会启动代码运行。


要模拟超快的点击序列,只需让代码触发事件。

var l1 = $('#link1');
var l2 = $('#link2');

l1.click();  // this alert will always come first
l2.click();