所以我正在做一些有关回调函数的练习,我想自己尝试一下,并与setTimeout方法一起使用它,令我惊讶的是,它没有按预期工作。.请问我在做什么错在这里。
function first(number, callback) {
setTimeout(function() {
console.log(number);
}, 5);
callback();
}
function second() {
console.log(2);
}
first(1, second);
答案 0 :(得分:2)
您正在同时执行setTimeout
和callback
。由于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.