0

私はここで奇妙な必要性を持っています、そしてそれが実現可能かどうかはわかりません。スレッドを使用してそれをどのように行うかを考えることしかできません(Quineして同時に実行したいスクリプトを実行しているスレッドと一緒にQuine関数を実行する別のスレッドを作成するには(手動でアラートを追加することなく!!!)、 javascriptにはその機能がありませんよね?

独自の最小限のJavaScriptデバッグ機能を備えたアプリケーションによって解釈されるJavaScriptがいくつかあります。私のスクリプトは失敗していて、このアプリケーションでしか理解できないステートメントも使用しているため、FirefoxまたはInternet Explorerでこれらのカスタムステートメントを処理できないため、これをデバッグできません。私が達成できることを望んでいるのは、別のプログラムを模倣できるだけでなく、それ自体の機能を実行できるプログラムです。

議論のために、「HelloWorld!」を出力するhello.jsというスクリプトがあるとしましょう。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)
     }
}
4

2 に答える 2

1

これは実際にはターゲットオーディエンス(ブラウザの使用)によって異なります。

Webワーカーを使用すると、非常に効果的な形式の疑似スレッドを取得できます。

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

ただし、これは広くサポートされていません。可能な場合はこれを使用できます。

setTimeoutを使用してコードを実行することにより、スレッド化と同様の動作を得ることができます。

タイマーがどのようにキューに入れられるかは、http: //ejohn.org/blog/how-javascript-timers-work/で確認できます。

Quine計算サーバー側を実行し、AJAXを使用して呼び出すこともできます。これは非同期リクエストを提供します。

これらの最後の2つのオプションはスレッド化されていませんが、コードは続行する前に応答を待機しません。

于 2010-09-01T13:06:18.307 に答える
0

私の知る限り、JavaScriptは純粋にモノスレッドです。
さらに、loadJSScript("C:\\Script\\Hello.js");あなたがブラウザについて言及しているので、声明は怪しいです。ブラウザのJS(少なくともWebページ)はファイルシステムにアクセスできません(さらに、移植性はありません!)。
ただし、MicrosoftのJScript(WSH)でそのようなことを行うことはできます。

于 2010-09-01T12:57:35.583 に答える