JavaScript回调超时

5

我有一个这里的小示例。

请问有人可以帮忙解释一下为什么第一个 setTimeout 起作用了,而第二个没有呢?请看代码中的注释。

在这个例子中,我想先弹出提示框 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!");
1个回答

11

在这段代码中:

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

你正在参数列表中直接调用回调函数。JavaScript 在调用函数之前会先评估函数参数,所以实际传递给 setTimeout() 的是回调函数返回的任何内容。

你需要这样做:

setTimeout(function() { callback(message1 + message2); }, 6000);

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


谢谢,我只是在想,既然回调本身就是一个函数,那么就不需要把它放在function(){}中了。 - JunM
setTimeout()之外调用callback(message1 + message2),您会期望它做什么? - Pointy
我原本期望在不将 callback(message1+message2) 放在 function(){} 中的情况下,它只会在指定时间后调用回调函数。但事实似乎并非如此。谢谢。 - JunM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接