iam目前正在研究JavaScript中的回调和异步编程的概念。为此,我阅读了由Philip Ackermann(ISBN:937-3-8362-5696-4)撰写的“ JavaScript”一书中的相应章节。但是我在理解术语异步适用于本书示例中使用的回调时遇到了问题。
我目前的了解是,我可以像这样编写同步回调:
function synchronousCallback(text, callback) {
//other code
callback(text);
}
synchronousCallback("End of function", console.log);
在上面的示例中,我认为回调仅是嵌套函数调用。而已。但是在本书的类似示例中,作者将这种函数称为异步。参见下面的确切示例:
function asyncFunction(callbackFunction) {
//some code
console.log('Before callback');
callbackFunction();
console.log('After callback');
//some more code
}
function callbackFunction() {
console.log('called callback');
}
asyncFunction(callbackFunction);
我对代码执行的理解是,一旦“其他代码”完成,该回调将立即执行。该回调将不会添加到javascript引擎的回调队列中,因此将被同步/阻止。
在我看来,与setTimeout()或setInterval()一起使用时,回调是异步的。
也许这本书中的示例令人误解,或者在那种情况下我误解了异步这个术语,或者我不正确地理解了这种回调方案的执行顺序。
感谢您的帮助或澄清
您给出的示例没有任何异步。
如果JavaScript事件循环继续运行程序的其余部分,直到外部因素(在setTimeout
情况下为时间流逝)触发回调,则回调是异步的。
或者这本书是错误的,或者您在书中给出的“相似”示例中没有充分表达所有内容。