在使用setTimeout()
和传递函数引用时,这是一个常见的错误,您希望在其中调用带有参数的函数。这行代码:
setTimeout( async_func(5, function(number) {
立即执行async_func()
,然后将其返回结果(不是函数)传递给setTimeout()
这不是您想要的。您想传递一个函数引用,setTimeout()
以便setTimeout()
稍后调用该函数,如下所示:
var async_func = function(x, func) {
func(x+5);
};
setTimeout( function() {
async_func(5, function(number) {
for (var x = 0; x < 1000000000; x++) {;}
console.log(number);
});
}, 3000);
console.log("done");
或者,有时通过将计时器回调函数设为不带参数的独立函数更容易理解。
function async_func(x, func) {
func(x+5);
}
function timer_func() {
async_func(5, function(number) {
for (var x = 0; x < 1000000000; x++) {;}
console.log(number);
});
}
setTimeout(timer_func, 3000);
console.log("done");