假设我有这样一段代码:
理想情况下,这段代码应该将200加到变量
但是,据我在c语言中的了解,如果操作符+=被分成多个命令执行会产生一些影响。
假设以下是函数的执行顺序:
在这种情况下,
这种情况在许多编程语言中都可能发生,如c、c++、java、c#等 - 但Javascript中也可能发生吗?
更一般地说,Javascript如何处理其线程?何时在线程之间切换,并且是否有内置方法可用于处理竞态条件?
var shared = 100;
function workWithIt(){
shared += 100;
}
setTimeout(workWithIt, 500);
setTimeout(workWithIt, 500);
理想情况下,这段代码应该将200加到变量
shared
上,之后它的值为300。但是,据我在c语言中的了解,如果操作符+=被分成多个命令执行会产生一些影响。
假设以下是函数的执行顺序:
setTimeout() --> create Thread A
setTimeout() --> create Thread B
wait 500ms
**Thread A** | **Thread B**
--------------------------------+---------------------------------
var tmpA = shared; //100 |
| var tmpB = shared; //100
| tmpB = tmpB+100; //tmpB=200
| shared = tmpB;
tmpA = tmpA+100; //tmpA=200 |
shared = tmpA; |
在这种情况下,
shared
现在的值为200。这种情况在许多编程语言中都可能发生,如c、c++、java、c#等 - 但Javascript中也可能发生吗?
更一般地说,Javascript如何处理其线程?何时在线程之间切换,并且是否有内置方法可用于处理竞态条件?
alert()
函数本身就是一个例外:在等待用户关闭警告框时,浏览器允许一些事件处理程序运行(我无法确切地回忆起哪些)。但是,运行 JavaScript 代码不会被浏览器中断 - 这就是为什么计算密集型代码(或无限循环)可能会导致浏览器弹出对话框询问用户是否要终止正在运行的代码的原因。 - Pointy