我这里有一个小提琴
谁能帮我理解为什么第一个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);