我有一个 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/