因此,今天早上我一直在创建随机回调函数,目的是让我真正了解如何使用它们以及为什么使用它们。
我得出的结论是,回调函数作为参数传递给另一个函数,目的是使用第一个函数中的数据来在回调函数中执行某些操作?让我知道我自己的解释是否合理,或者我是否不太满意。
我会使用这些回调函数来等待另一个函数所需的数据,以使我的回调正常工作吗?
对我来说,这似乎是最奇怪但最难的概念。就像第一天,我有信心,然后一周后又感到困惑。
答案 0 :(得分:1)
解释正确。顾名思义,回调是用于回调的函数:
function callMeBackPleaseAndSayWakeUp(phrase) {
say(phrase);
}
function aFriendWhoLovesToWorkAsAHumanAlarm(timeSpan, callback) {
setTimeout(() => callback('Wake up'), timeSpan);
}
aFriendWhoLovesToWorkAsAHumanAlarm(60 * 60 * 9, callMeBackPleaseAndSayWakeUp);
回调是使松散耦合的应用程序彼此交互的基本机制。
答案 1 :(得分:0)
想象一下某个函数需要一些时间才能完成,例如函数内部的setTimeout
,因此您想在setTimeout
完成后再运行其他函数。您不能仅一个接一个地调用函数来执行此操作,因为它只会启动倒数计时并继续执行下一个函数。因此,您需要在setTimeout
内创建函数,并在首次调用AKA回调函数时将函数作为参数传递。
现在您会想,“但是我可以像这样简单地在setTimeout
函数内部插入代码块”
function doItAfterMinute(){
setTimeout(()=>{
//block of code
},60000)
}
是的,但是如果一分钟后要完成10个不同的功能,怎么办却不会使10个setTimeout
函数具有10个不同的名称呢?
在这种情况下,回调显示了它的力量。
function doItAfterMinute(cb){
setTimeout(()=>{
cb()
},60000)
}
doItAfterMinute(()=>{ console.log('hey, minute passed!))
doItAfterMinute(()=>{ console.log('hey, another minute!))
答案 2 :(得分:0)
我会使用这些回调函数来等待另一个函数所需的数据,以使我的回调正常工作吗?
这是一个常见的用例:您正在等待直到将来某个时间才可用的数据。
另一个用例:您只需要通知发生了什么事即可。进程已成功(或未成功)完成,并且您要更新UI。
还有另一件事:您需要通知您一些时间已经过去。 setTimeout()
和setInterval()
是完美的例子。
要尝试,请在浏览器中打开控制台(在Mac上为⌘-Alt-I;在其他计算机上为Ctrl-Shift-I或其他工具),然后键入以下内容:
setTimeout(() => console.log("Two seconds later"), 2000);
两秒钟后...