2009-01-20 45 views
0

我目前正在使用包含特定交互次數的消息記錄AJAX應用程序。所以,我有幾個地方的代碼爲圖案像這樣:eval()的線程行爲是否在不同的瀏覽器中有所不同?

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燒掉到一個新的線程中,從而導致我的計時錯誤?

任何其他建議的時機將不勝感激。

回答

1

不是。所有的瀏覽器都是單引擎的JavaScript引擎。我懷疑你也可以簡單地通過調用toTime()作爲函數而不是使用eval()來解決這個問題。您可能希望查看javascript arguments對象和javascript「call」和「apply」方法以將傳遞給外部「time」函數的參數透明地轉發到內部「toTime」函數。

0

Eval應該是同步的。

您不應該使用eval(),而是toTime.call(),因爲您應該避免使用eval。

+0

爲什麼我應該避免使用eval()?我不認爲我會,但我只是好奇。 – Grundlefleck 2009-01-20 20:48:15

相關問題