我想了解为什么在此特定情况下首先弹出针对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();
});
})
您的代码调用base()
函数,并传入一个也调用base()
的函数。因此,“第二”功能首先完成,因为对base()
的嵌套调用会在为“第一”功能发布alert()
之前调用它。
使用console.log()
代替alert()
。
函数first()在second()之前执行,但是警报在两者都执行之后生成,因为您已将二者封装到回调方法中。并且在完成整个功能后会生成警报。也许您应该按照以下方式编写代码以了解会发生什么。