为什么在此示例中首先嵌入回调的脚本?

问题描述 投票:0回答:2

我想了解为什么在此特定情况下首先弹出针对script2的警报?如果我在基本函数声明中取消注释setTimeout,则script1首先发出警报。我期望在有或没有setTimeout的情况下,在基本函数中script1将首先发出警报。一个澄清的答案将不胜感激。

function base(src, cb) {
  //setTimeout(() => {
  cb();
  alert(src + ' finished executing')
  //}, 100)
}

function first() {
  setTimeout(() => {
    alert('first');
  }, 110)
}

function second() {
  setTimeout(() => {
    alert('second');
  }, 110);
}

base('script 1', () => {
  first();
  base('script 2', () => {
    second();
  });
})
javascript callback
2个回答
0
投票

您的代码调用base()函数,并传入一个也调用base()的函数。因此,“第二”功能首先完成,因为对base()的嵌套调用会在为“第一”功能发布alert()之前调用它。

使用console.log()代替alert()


0
投票

函数first()在second()之前执行,但是警报在两者都执行之后生成,因为您已将二者封装到回调方法中。并且在完成整个功能后会生成警报。也许您应该按照以下方式编写代码以了解会发生什么。

© www.soinside.com 2019 - 2024. All rights reserved.