我有一个 fiddle here

有人可以帮我理解为什么第一个setTimeout有效但对second无效吗?请查看代码注释。

在这种情况下,我想先提醒I am first,然后在6秒后提醒Hello, sorry I am late

function iAmTakingTooLong(message1, message2, callback){
    //setTimeout(function(){ alert('test'); },6000); //THIS WILL WAIT FOR 6000 MILLISECONDS
    setTimeout(callback(message1+message2),6000);    //THIS WILL NOT WAIT FOR 6000 MILLISECONDS
}


iAmTakingTooLong('Hello, ', 'sorry I am late!', function(fullmessage){
    alert(fullmessage);
});

alert("I am first!");

最佳答案

在此代码中:

setTimeout(callback(message1+message2),6000);

在参数列表中调用回调函数。 JavaScript在调用函数之前先评估函数参数,因此实际上传递给setTimeout()的是回调函数返回的内容。

您需要以下内容:
setTimeout(function() { callback(message1 + message2); }, 6000);

这里的行为不是JavaScript独有的。

关于JavaScript回调超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22690781/

10-16 00:13