IE可以同时执行两个JavaScript函数吗?

Can IE execute two JavaScript functions concurrently

本文关键字:两个 JavaScript 函数 执行 IE      更新时间:2023-09-26

我们使用C#的WatiN与浏览器(目前只有IE)进行交互。

WatiN 的一些方法是一个简单的包装器,它向某些 Web 元素发送onchanged()onclick()

WatiN 还为此提供了一个即发即弃版本,它基本上提供了一个非阻塞版本。

我的问题是,浏览器是否还要同时执行两个JS函数?

例如,假设以下代码:

// Uses FireEventAsync("onchanged")
SelectList.SelectNoWait()
SelectList.FireEventAsync("onclick")

JS函数可以同时执行吗?

我相信我们遇到了类似的问题,当我们触发另一个事件时,onchanged()函数仍在执行,我想知道这在技术上是否可行。

不,只要您不专门使用 Web Workers,就不能同时执行多个操作。浏览器上下文中只能有一个用户线程处于活动状态。

通常,您只执行在事件上调用的小函数,大多数长任务与资源和异步相关。

当您认为"基于事件"并且(最重要的是)不要尝试从自然异步的内容进行同步调用时(我想到了 AJAX),您没有问题。

简而言之:不。JavaScript 执行是单线程的。

但是,对于异步操作(ajax、计时器、工作线程等),可以将函数的某些部分设置为稍后在线程空闲时执行。

一个人为的例子是:

function foo() {
    setTimeout(function () {
        console.log('three');
    }, 10);
    console.log('one');
}
function bar() {
    console.log('two');
}
foo();
bar();

虽然 foobar 是同步调用的,并且日志是按three, one, two顺序写入的,但它们将按one, two, three的顺序执行,因为计时器会将 ' three' 的日志延迟到以后。

而且,即使您的处理程序不使用任何异步内容,SelectNoWaitFireEventAsync也可能使用。