IE可以同时执行2个JavaScript函数

时间:2012-07-02 16:54:13

标签: c# javascript .net javascript-events watin

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

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

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

我的问题是,浏览器还有2个JS函数同时执行吗?

例如,假设以下代码:

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

SelectList.FireEventAsync("onclick")

可以同时执行onclick和onchanged两个JS函数吗?

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

2 个答案:

答案 0 :(得分:2)

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

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

当你认为“基于事件”和(最重要的)不尝试从自然异步(我想到AJAX)进行同步调用时,你没有问题。

答案 1 :(得分:1)

简而言之:不。 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也可能会这样做。