我做了很多搜索,但仍然无法弄清楚。
很简单,全局变量的初始值为false
;
var globalVar = false;
setTimeout
两次用于调用相同的函数:function(){
if(!globalVar){
globalVar = true;
alert('show only once');
}
}
那么
alert
仅被调用一次吗?还是可能出现种族状况? 最佳答案
不在您的情况下。 Javascript在单线程环境中运行。您的一个超时将在另一个超时之前完全执行,这意味着当另一个超时执行时,它将看到globalVar
是true
。
唯一可能发生的并发问题是等待IO,超时或类似情况。在这一点上,其他的JavaScript被允许执行。任何代码都不会中断其他代码来执行。
例如:
setTimeout(function () { alert('hi!'); }, 1000);
while(true) {}
您将永远不会看到警报,因为while循环将忙于等待,将javascript线程压缩为其他代码,并且永远不会给超时提供执行机会。