例子:
// A
ajax( "..", function(..){
// C
} );
// B
//
A和// B
表示程序的前半部分(也就是现在的部分),而// C
标识了程序的后半部分 (也就是将来的部分)。前半部分立刻执行,然后是一段时间不确定的停顿。在未来的某个时刻,如果 Ajax
调用完成,程序就会从停下的位置继续执行后半部分。
换句话说,回调函数包裹或者说封装了程序的延续(continuation)。
简化代码:
// A
setTimeout( function(){
// C
}, 1000 );
// B
一旦以回调函数的形式引入了单个 continuation
(或者几十个),我们就容许了大脑工作方式和代码执行方式的分歧。一旦这两者出现分歧,就会使代码变得更加难以理解、追踪、调试和维护。