Javascript eval()的线程行为是否因浏览器而异?

Javascript eval()的线程行为是否因浏览器而异?,javascript,eval,timing,Javascript,Eval,Timing,我目前正在记录一个AJAX应用程序,其中包含一些消息,其中包括某些交互的时间。我有几个地方的代码遵循如下模式: var startTime = new Date(); this.doFunction(); var endTime = new Date(); logger.log("doFunction took " + (endTime - startTime) + " milliseconds."); 我要做的是将计时分离为一个库函数,它将函数作为参数,看起来像: time : functi

我目前正在记录一个AJAX应用程序,其中包含一些消息,其中包括某些交互的时间。我有几个地方的代码遵循如下模式:

var startTime = new Date();
this.doFunction();
var endTime = new Date();
logger.log("doFunction took " + (endTime - startTime) + " milliseconds.");
我要做的是将计时分离为一个库函数,它将函数作为参数,看起来像:

time : function(toTime) {
    var startTime = new Date();
    eval(toTime);
    var endTime = new Date();
    logger.log(toTime + " took " + (endTime - startTime) + " milliseconds.");
} 
(语法可能有误,我不太熟悉JavaScript)

因此,我不做计时,而是做:

time(this.doFunction);
我的问题是,对于
eval()
,不同的浏览器有不同的行为吗?比如将eval启动到一个新线程中,从而导致计时错误


任何关于计时的其他建议都将不胜感激。

否。所有浏览器在javascript引擎中都是单线程的。我猜想,您也可以通过将toTime()作为函数调用而不是使用eval()来解决这个问题。您可能希望查看javascript对象以及javascript“”和“apply”方法,以便将传递给外部“time”函数的参数透明地转发给内部“toTime”函数。

Eval应该是同步的


您不应该使用
eval()
而是
toTime.call()
,因为您应该避免使用eval。

为什么我应该避免使用eval()?我不认为我会,但我只是好奇..因为eval()可以让其他人很容易插入恶意javascript,而且在大多数情况下不需要使用eval()。啊,从来没有考虑过这一点。干杯