异步分配JavaScript变量的风险

异步分配JavaScript变量的风险,javascript,asynchronous,callback,synchronization,Javascript,Asynchronous,Callback,Synchronization,有许多与(a)同步执行和承诺相关的stackoverflow问题,但我没有找到答案 假设我有以下几点: var number = 0; someAsyncFunctionWithCallback(function(){ number++; }); // ^ execute the above multiple times 由于函数每次调用的执行时间不同,回调将在不同的时间被调用。因此,我想知道变量递增行的行为是什么。在Java中,我可以将变量声明为synchronous,以便考虑每个增

有许多与(a)同步执行和承诺相关的stackoverflow问题,但我没有找到答案

假设我有以下几点:

var number = 0;
someAsyncFunctionWithCallback(function(){
    number++;
});
// ^ execute the above multiple times

由于函数每次调用的执行时间不同,回调将在不同的时间被调用。因此,我想知道变量递增行的行为是什么。在Java中,我可以将变量声明为
synchronous
,以便考虑每个增量。对于上面的代码,数字的每个增量都是有保证的,还是没有必要?

只要您能够确定
someAsyncFunctionWithCallback
何时以及多久运行一次,此方法就没有问题。您只需要知道这样一个事实,即在任何给定点检查变量只会根据回调执行的次数反映其当前值。

JavaScript始终与自身同步。这不是真正的多线程,JS不支持或使用多线程。

每个回调
函数(){number++;}
稍后将以不确定的顺序调用,以增加
数量。这里只有一件事可以保证:N回调执行将增加变量的N倍,问题是你想在哪一点上测试它,如果你想保持它只是
++
增量或者需要链接或订购的实际东西,根据我在这方面的经验,你应该不用担心。我还没有经历过一场灾难problem@johnSmith我担心可能会出现某种竞争条件,但下面的回答说javascript不会执行真正的多线程,因此所有变量访问都保持同步。啊,这是有道理的。我不是很确定,很高兴知道。谢谢