解决方案 »

  1.   

      在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。
    deferred对象就是jQuery的回调函数解决方案。JQuery中的Deferred Object其实就是实现了一种异步编程模式,这个模式在CommonJS中有介绍。这种模式改变的代码的书写方式,他采用的异步模式还是回调式异步(async callback)。通常我们的异步代码都是non-blocking的,我们开一个异步操作,我们不知道什么时候完成,我们需要知道的就是这个异步操作在完成的时候通过我们传入的callback来通知我们。事件式异步也差不多,在一个object上attach一个event,当这个object的状态发生改变的时候调用这个注册的函数。C#中WinForm的编程就是这种模式。他的代码也体现了这种编程模式:btnDone.OnClick += new ClickCallback(btnDone_click);
    事件式编程与上面的notification式的区别就是,事件是预先attach在object上的。这里的关注点在object,以object为中心。object不存在了,那么事件就无从谈起了。而notification式的异步关注点在事件本身,也就是以事件为中心。发送者和接受者唯一关联的就是这个事件,事件发生执行完了,发送者和接受者就没有关系了,直到下次事件发生。