我有一个html按钮,需要异步触发3个事件.
如果我有这个:
$('#id').click(function(e) {
func1();
});
$('#id').click(function(e) {
func2();
});
$('#id').click(function(e) {
func3();
});
Run Code Online (Sandbox Code Playgroud)
我得到并发吗?或者,如果一个函数需要很长时间,下一个函数会被阻止?Javascript如何处理这些顺序调用?
谢谢,
我能得到并发吗?
不。
或者如果一个函数需要很长时间,下一个函数就会被阻塞?
下一个会被阻塞,直到第一个完成执行。
Javascript 如何处理这种顺序调用?
同一对象上的三个事件处理程序将依次调用,并且不会同时运行。同一对象上同一事件的事件处理程序按照它们附加的顺序依次执行。
JavaScript 运行一个函数直到它完成。当该函数正在运行时,不会运行其他 Javascript(除了 webWorkers,但这不是我们在这里讨论的内容)。因此,每个事件处理程序将一次运行一个,一个接一个。
您无法创建自己的异步 Javascript 来与其他 Javascript 函数同时执行。Javascript 中的异步操作可以与其他操作并行运行,因此需要外部异步支持才能实现这一点。
您可以在自己的函数中使用现有的异步操作(例如setTimeout()Ajax 调用)来创建一些类似异步的行为,但实际的异步工作将发生在以本机代码实现的现有异步操作中。
仅供参考,在浏览器中,您可以使用 webWorkers 在并行执行线程中运行代码。webWorkers 面临的挑战是它们必须在完全独立的环境中运行(没有共享变量或函数),并且只能通过消息传递与主 JS 线程进行通信,消息传递通过事件队列进行协调(以防止线程同步问题)。这对于某些事情很有用,例如您不希望 UI 被阻止的长时间计算,但它能做什么和不能做什么(例如,不能修改 DOM)受到相当的限制。
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |