1

2 つの関数で変更できる変数があるとします。1 つは定期的に呼び出されsetTimeout、もう 1 つはイベント ハンドラーです。

var a = [];
function foo()
{
   var x = a.pop();
   // do something with x...
   setTimeout(function(){ foo(); }, 1);
}
//...
someElement.addEventListener("keypress", function(e){ a.push("some value"); }, true);

このコードは安全ですか? イベントリスナーとfoo実行は同じスレッドで実行されますか?それとも異なるスレッドで実行されますか? それらが異なるスレッドで実行される場合、javascript ランタイムはアクセスaが同期されていることを保証する必要がありますか?

4

1 に答える 1

3

JavaScript は、ブラウザーでは常にシングル スレッドです。イベントリスナーに問題はありません。

ユーザーJonathonによるこの優れた回答を紹介します

于 2013-06-24T20:52:47.000 に答える