Javascript eval()的线程行为是否因浏览器而异?
我目前正在记录一个AJAX应用程序,其中包含一些消息,其中包括某些交互的时间。我有几个地方的代码遵循如下模式: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
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()。啊,从来没有考虑过这一点。干杯