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

时间:2009-01-20 12:43:36

标签: javascript eval timing

我目前正在使用包含某些交互次数的消息记录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发射到新线程中,从而导致我的时间不正确?

有关时间安排的任何其他建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

Eval应该是同步的。

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