我在我的Firefox上运行这些代码,console
获取3 2 1
,这意味着语句在前者结束之前运行。
function test(){
setTimeout(function(){console.log(1)},1000); //statement 0
setTimeout(function(){console.log(2)},500); //statement 1
}
test();
console.log(3); //statement 2
它是javascript的一个功能,在分配变量后我是否必须仔细检查变量? Cuz'太复杂了。
var a;
while(a!==get('some')){
a=get('some');
if(a===get('some')){
whatShouldBeRun();afterGetSome();
break;
}
}
答案 0 :(得分:3)
这正是你要求它做的。首先,你要求它启动两个声明以便在将来运行某些点。然后你写“3”。那些运行时间的第一个语句然后运行,并写入“2”。最后,第三次运行并写入“1”。
如果您正在使用异步处理 - settimeout - 那么您需要像处理任何其他语言一样处理此问题。但是如果你需要它按顺序运行,不要告诉它以异步方式运行。
让他们一个接一个地跑:
function test()
{
setTimeout(function()
{
console.log(1);setTimeout(function()
{
console.log(2);console.log(3)
},500)
},1000);
}
test();
[我可能有一些错误]
答案 1 :(得分:1)
上面的代码启动了两个timers,它将在500和1000毫秒后触发。 console.log(3);
将首先运行,没有延迟;在500毫秒之后,将执行console.log(2)
,并在另外500毫秒之后执行console.log(1)
。这是定时器如何在包含定时器的任何语言/框架中工作的一般方法。
顺序代码按顺序运行,即后续代码行按顺序执行。基于事件的系统(如Web浏览器及其JavaScript实现)的不同之处在于事件处理程序仅在事件发生时执行。代码test(); console.log(3);
按顺序执行:通过使用给定的时间间隔和事件处理程序调用{{1}}启动两个计时器,并将setTimeout
写入控制台。第一个计时器的“tick”事件发生在500 ms之后,其事件处理函数将3
写入控制台。第二个“tick”事件发生在另一个500 ms之后,并将写入2
。