我创建了一个 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()。当我继续修改单元格时,将异步调用此事件,这将依次调用函数“modifyCCMap”,该函数将修改我的 Javascript 对象的私有(private)成员“CCMap”。所以两次调用看到的我的 CCMap 的最新状态可能不同,对吗?那么处理这个问题的最佳方法是什么? Javascript 中是否存在与 Java 中一样“同步”的东西?
请帮助我,因为它将确定我们要采用的实现方法。
最佳答案
JavaScript 是单线程的(web-worker 暂且搁置),异步 没有任何事情发生(或与此相关的一切)- 所有代码:事件处理程序、超时、回调等。-在同一个线程中一个接一个地运行。
因此您不需要在 JavaScript 中进行任何同步。 JavaScript 中的任何给定代码都保证仅由单个线程执行。这有多酷?
另见
- JavaScript equivalent of SwingUtilities.invokeLater()
- "atomic" operation desturbed by asynchronous ajax callbacks
- Are there any atomic javascript operations to deal with Ajax's asynchronous nature?
- how is async programming (promises) implemented in javascript? isn't javascript a ui-threaded environment?
- ...
关于javascript - 如何同步访问 javascript 对象的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960531/