如何同步访问javascript对象的私有成员

Sha*_*yan 7 javascript synchronized members

我有一个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.  
    }  
  }
)();
Run Code Online (Sandbox Code Playgroud)

我有一个DHTMLXGrid组件,它以行和列的形式显示网格.当我编辑网格中的任何单元格时,会调用"onEditCell"事件.现在,我想从附加到"onEditCell"事件的事件处理函数调用ccStatTracker.modifyCCMap().当我继续修改单元格时,这个事件将被异步调用,这将调用一个函数"modifyCCMap",它将修改我的Javascript对象的私有成员"CCMap".因此,两次调用看到的CCMap的最新状态可能不同吗?那么处理这个问题的最佳方法是什么?Javascript和Java中有"同步"的东西吗?

请帮助我,因为它将决定我们为实现这一目标而采取的方法.

Tom*_*icz 15

JavaScript是单线程的(暂时搁置),没有任何异步发生(或者所有事情) - 所有代码:事件处理程序,超时,回调等 - 在同一个线程中一个接一个地运行.

因此,您不需要在JavaScript中进行任何同步.JavaScript中的任何给定代码片段都保证只由一个线程执行.多么酷啊?

也可以看看

  • 首先,ECMAScript不需要在单个线程中执行JS.其次,setTimeout()等由HTML5指定,其中明确定义了处理程序确实可以在并行线程中运行:https://html.spec.whatwg.org/multipage/infrastructure.html#in-parallel (5认同)
  • @fishbone 那么我们需要采取哪些额外的预防措施? (3认同)