下一个语句在前一个语句结束之前运行

The next statement runs before the former one ends

本文关键字:语句 一个 结束 运行 下一个      更新时间:2023-09-26

我在我的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的一个功能,我是否必须在分配一些值后仔细检查变量?因为这太复杂了。

var a;
while(a!==get('some')){
    a=get('some');
    if(a===get('some')){
       whatShouldBeRun();afterGetSome();
       break;
    }
}

这正是您要求它做的。首先,您要求它启动两个语句,以便在将来运行某个点。然后写上"3"。第一个语句的时间是运行,然后运行,并写"2"。最后,第三个程序运行并写入"1"。

如果你正在使用异步处理- settimeout -那么是的,你需要像处理任何其他语言一样处理它。但是如果你需要它按顺序运行,就不要让它异步运行。

让它们一个接一个地运行:

function test()
{
    setTimeout(function()
    {
        console.log(1);setTimeout(function()
           {
                  console.log(2);console.log(3)
           },500)
    },1000);
}
test();

上面的代码启动了两个计时器,分别在500和1000毫秒后触发。console.log(3);将首先运行,没有延迟;500毫秒后,执行console.log(2),再过500毫秒,执行console.log(1)。这是计时器在任何包含计时器的语言/框架中工作的一般方式。

顺序代码按顺序运行,即后续代码行按顺序执行。基于事件的系统(如web浏览器及其JavaScript实现)的不同之处在于,事件处理程序仅在事件发生时执行。代码test(); console.log(3);按顺序执行:使用给定的时间间隔和事件处理程序调用setTimeout来启动两个计时器,并将3写入控制台。第一个计时器的"tick"事件在500毫秒后出现,它的事件处理程序函数将把2写入控制台。第二个的"tick"事件发生在另一个500毫秒之后,并将写入1 .