例子:

    1. // A
    2. ajax( "..", function(..){
    3. // C
    4. } );
    5. // B

    // A和// B表示程序的前半部分(也就是现在的部分),而// C标识了程序的后半部分 (也就是将来的部分)。前半部分立刻执行,然后是一段时间不确定的停顿。在未来的某个时刻,如果 Ajax 调用完成,程序就会从停下的位置继续执行后半部分。
    换句话说,回调函数包裹或者说封装了程序的延续(continuation)。
    简化代码:

    1. // A
    2. setTimeout( function(){
    3. // C
    4. }, 1000 );
    5. // B

    一旦以回调函数的形式引入了单个 continuation(或者几十个),我们就容许了大脑工作方式和代码执行方式的分歧。一旦这两者出现分歧,就会使代码变得更加难以理解、追踪、调试和维护。