9

次のように作成されたJavascriptオブジェクトがあります。

var ccStatTracker = (function (){
  ccmap:{
    "1":["1","2","3","4"],
    "2":["4","5"];       
  }

  return {
    modifyCCMap: function (){
      // Code which takes following actions: 
      // - adds/removes keys.
      // - modifies arrays stored as values against the keys in the map.  
    }  
  }
)();

行と列の形式でグリッドを表示するDHTMLXGridコンポーネントがあります。グリッド内のセルを編集すると、「onEditCell」イベントが呼び出されます。ここで、「onEditCell」イベントにアタッチされたイベントハンドラー関数からccStatTracker.modifyCCMap()を呼び出したいと思います。セルの変更を続けると、このイベントは非同期的に呼び出され、Javascriptオブジェクトのプライベートメンバー「CCMap」を変更する関数「modifyCCMap」が呼び出されます。では、2回の呼び出しで見たCCMapの最新の状態は異なる可能性がありますか?では、これを処理するための最良の方法は何ですか?JavaのようにJavascriptに「同期」されたものはありますか?

これを実装するために私たちが取りたいアプローチを決定するので、私を助けてください。

4

1 に答える 1

24

JavaScriptはシングルスレッドであり(はしばらく脇にあります)、非同期では何も起こりません(またはそれに関するすべてのこと)-すべてのコード:イベントハンドラー、タイムアウト、コールバックなど-同じスレッドで次々に実行されます。

したがって、JavaScriptで同期する必要はありません。JavaScriptの特定のコードは、単一のスレッドによってのみ実行されることが保証されています。それはどれくらいクールですか?

も参照してください

于 2012-06-09T11:20:13.970 に答える