javascript函数执行序列

时间:2016-08-02 08:33:18

标签: javascript

我有一个关于javascript函数序列的问题,下面我有两个代码,为什么这两个程序的结果不同? 我认为第一个程序结果将等于第二个程序结果。

function test1() {
  for (var i = 1; i <= 1000000; i++) {
  }
  console.log("test1");
}

function test2() {
  console.log("test2");
}

test1();
test2();
//test1
//test2
function test1() {
      setTimeout(function() {
        console.log("test1");
      }, 1000);
    }

function test2() {
  console.log("test2");
}

test1();
test2();
//test2
//test1

4 个答案:

答案 0 :(得分:0)

因为setTimeoutMDN | spec)的目的是安排对函数稍后调用,所以异步调用。所以在你的第二个例子中,你首先调用test1,然后调用匿名回调一秒钟,然后返回。然后你打电话给test2立即打印。一秒钟后,计时器调用回调,并打印test1

对你的第二个例子的这个小调整可能会更清楚:

function test1() {
  console.log("test1 called, setting up timer");
  setTimeout(function() {
    console.log("timer fired and called the callback");
  }, 1000);
}

function test2() {
  console.log("test2 called");
}

test1();
test2();

您会看到此输出(最后一行仅在一秒后出现):

test1 called, setting up timer
test2 called
timer fired and called the callback

答案 1 :(得分:0)

setTimeout是一个异步操作,该数字用于定义代码执行的延迟。 1000是延迟,因此您会看到不同的结果

答案 2 :(得分:0)

http://javascript.info/tutorial/settimeout-setinterval 看一下这个 mabe它会有所帮助:)

答案 3 :(得分:0)

在我看来,也许你当前的主题陷入&#34; for&#34;在你的第一个代码片段中循环。但是操作是在第二个代码片段中异步完成的。