簡體   English   中英

Javascript:同時執行和Quine

[英]Javascript: Execute and Quine at the same time

我在這里有一個奇異的需求,我不確定它的可行性。 我只能考慮如何使用線程(要創建另一個執行Quine功能的線程以及運行我想Quine並同時執行的腳本的線程(無需在各處手動添加警報!),但是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)
     }
}

這實際上取決於您的目標受眾(瀏覽器的使用)。

您可以使用Web Worker獲得非常有效的偽線程形式。

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

但是,這一點並未得到廣泛支持。 您可以在可用的地方使用它。

通過使用setTimeout執行代碼,您還可以獲得與線程類似的行為。

您可以在此處查看計時器的排隊方式: http : //ejohn.org/blog/how-javascript-timers-work/

您也可以在Quine計算服務器端進行操作,並使用AJAX進行調用。 這確實給出了異步請求。

最后兩個選項不是線程化的,但是代碼在繼續之前不會等待響應。

就我所知,JavaScript是純單線程的。
此外, loadJSScript("C:\\\\Script\\\\Hello.js"); 因為您提到瀏覽器,所以聲明很糟糕。 瀏覽器中的JS(至少在網頁中)無法訪問文件系統(此外,它不可移植!)。
不過,您也許可以在Microsoft的JScript(在WSH中)執行類似的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM