Javascript回调超时

Javascript回调超时,javascript,callback,Javascript,Callback,我有一把小提琴 有人能帮我理解为什么第一个setTimeout有效,而第二个无效吗?请参阅对代码的评论 在这种情况下,我想先提醒我是第一个,然后在6秒钟后,它会提醒你好,对不起,我迟到了 function iAmTakingTooLong(message1, message2, callback){ //setTimeout(function(){ alert('test'); },6000); //THIS WILL WAIT FOR 6000 MILLISECONDS

我有一把小提琴

有人能帮我理解为什么第一个
setTimeout
有效,而第二个
无效吗?请参阅对代码的评论

在这种情况下,我想先提醒
我是第一个
,然后在6秒钟后,它会提醒
你好,对不起,我迟到了

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独有的。

谢谢,伙计,我只是想知道,因为我认为回调已经是一个函数,不需要将它放在
function(){}
中,在调用
setTimeout()之外,您希望
callback(message1+message2)
做什么
?我希望在不将
回调(message1+message2)
放入
函数({}
中的情况下,它只会在指定的时间后调用回调。但情况似乎并非如此。非常感谢。