假设我们在某个 div
上收到了一个 onClick
事件,但在此之前,我们需要使用 jQuery 完成一项大型计算,这大约需要 3 秒jQuery 当前正忙,因此它无法识别我的事件调用。
因此,1 秒钟过去了,我点击了该框。什么都没发生? 2秒。什么都没发生? 3 秒,jQuery 完成当前任务。我的 onclick
jQuery 事件有效,框消失了。
问题是; 在这种情况下 jQuery 会做什么?自动创建一个线程来立即执行我的 onclick 事件?排队通话? (所以它会在任务完成时执行我的 3 次点击,因此有 3 个事件调用)完全忽略前 2 个调用?另外,我应该怎么做才能避免此类问题?
最佳答案
JavaScript 就像单线程一样运行。据我了解,某些浏览器在实际实现方面有所不同,但编写脚本时期望它们将线性执行是安全的。
我想您的浏览器会在 UI 被阻止期间对点击进行排队,但由浏览器决定如何处理这种情况。 (我的 Chrome 在阻塞的 UI 期间排队点击事件)
也就是说,在较新的浏览器中实现了一个很酷的功能:
它允许您在不阻塞 UI 的情况下在后台执行昂贵/长时间的操作。如果您的脚本将在大多数新浏览器上运行,则可能值得深入研究此功能。奖励:那篇文章是由 jQuery 的鼻祖写的! =)
关于javascript - jQuery 对此有何 react ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783452/