2010-09-01 23 views
0

我在這裏有一個奇怪的需求,我不確定它的可行性。我只能想到如何使用線程來執行此操作(要創建另一個執行Quine函數的線程,該線程在運行腳本的同時執行Quine函數,我希望同時執行Quine並執行腳本(無需手動向各處添加警報!!!),但javascript沒有這個功能,對吧?Javascript:同時執行和奎因

我有一些JavaScript是由一個應用程序來解釋的,它具有最小的JavaScript調試功能,我的腳本正在崩潰,因爲它也使用了一些只被這個應用程序理解的語句我無法在Firefox或Internet Explorer中調試它,因爲它們無法處理這些自定義語句。我希望能夠實現的一個程序可以模擬另一個程序,但也可以執行它自己的功能。爲了說明我有一個名爲hello.js的腳本,輸出「Hello World!」100次,當提供給應用程序時,它解釋了這一點,但是在某些時候已經崩潰了,但我無法說出爲什麼,何時何地因爲有限的調試功能。

function main(){ 
    for(var i=0; i<100; i++){ 
      alert('Hello World!\n'); 
    } 
} 

然後我想有一個腳本,我可以傳遞給應用程序,而不是將假裝是上面的腳本,但也警惕在執行每個語句之前。我可以這樣做:

function main(){ 
    alert('main()') 
    for(var i=0; i<100; i++){ 
      alert("alert('Hello World!\n');"); 
      alert('Hello World!\n'); 
    } 
} 

但是我相信你可以看到如何爲一個長期的計劃這將是一項艱鉅的任務。相反,我想做一個程序,可以這樣執行:

function main(){ 
    var text = loadJSScript("C:\\Script\\Hello.js"); //Loads a text/javascript file line by line into an array 
    for(var i=0; i<text.length; i++){ 
      var statement = text[i]; 
      alert("Line Number: " + i + " Statement: " + statement); //Output the line number and statement before executing 
      execute(statement); //A function that executes the statement from the other file (as if a separate thread) 
    } 
} 

回答

1

這真的取決於您的目標受衆(瀏覽器使用)。

您可以通過使用Web工作人員獲得一種非常有效的僞線程化形式。

http://ejohn.org/blog/web-workers/

但是這並不廣泛支持。你可以在可用的地方使用它。

通過使用setTimeout來執行代碼,您也可以獲得一些與線程類似的行爲。

你可以看到計時器都在這裏排隊: http://ejohn.org/blog/how-javascript-timers-work/

你也可以做使用AJAX的奎因計算服務器端和電話。這確實提供了一個異步請求。

最後2個選項不是線程,但代碼在繼續之前不會等待響應。

+0

http://articles.sitepoint。com/article/multi-threading-javascript 一個關於多線程Javascript的文章的例子,探索使用setInterval(類似於setTimeout但是重複發生) 但是如果可能的話,AJAX看起來更好。 – 2010-09-01 13:13:05

+0

乾杯我會看看這個,並嘗試網絡工作者。 – 2010-09-01 13:34:50

0

據我所知,JavaScript純粹是單線程的。
此外,loadJSScript("C:\\Script\\Hello.js");聲明是可疑的,因爲你提到瀏覽器。瀏覽器中的JS(至少在Web頁面中)無法訪問文件系統(旁邊的文件系統不可移植!)。
雖然你也許可以在微軟的JScript(WSH)中做類似的事情。

+0

這是一個瀏覽器駐留在客戶端應用程序與文件系統功能使用一些專有的JavaScript函數。感謝您回覆:) – 2010-09-01 13:35:13