JavaScript CallBack Function ..ish问题

时间:2018-08-20 15:36:31

标签: javascript callback

所以我正在做一些有关回调函数的练习,我想自己尝试一下,并与setTimeout方法一起使用它,令我惊讶的是,它没有按预期工作。.请问我在做什么错在这里。

function first(number, callback) {
  setTimeout(function() {
    console.log(number);
  }, 5);
  callback();
}

function second() {
  console.log(2);
}

first(1, second);

2 个答案:

答案 0 :(得分:2)

您正在同时执行setTimeoutcallback。由于JavaScript是单线程的,因此它不会等待setTimeout完成之后再执行下一条语句。

这就是为什么,2立即打印,然后1在5毫秒的延迟后打印。

如果要先打印1,则需要在callback的回调中调用setTimeout函数。这样可以确保console.log(number)在调用callback(打印2)之前执行。

function first(number, callback) {
  setTimeout(function() {
    console.log(number);
    callback();
  }, 5);
}

function second() {
  console.log(2);
}

first(1, second);

答案 1 :(得分:0)

正如31piy所说,setTimeout()callback()正在同时执行。您的代码 first 首先安排从现在起5毫秒执行一个函数,然后立即运行另一个将2记录到控制台的函数。

您可以通过两种类似的方法来达到预期的效果,我将展示一种:

function first(number,callback) {
  setTimeout(function() {
    callback();
  }, 5);
  
  console.log(number);
}

function second() {
  console.log(2);
}

first(1, second);

//Here, you immediately print the number 1 and schedule the number 2.