贝尔_1987
2015-01-04 23:33
目前但看代码能看懂,但不明白具体有什么作用。加入之后立即调用之前的参数,什么场合有用?
首先,回调函数是从异步队列分离出来的,那么就是无缝贴合Deferred的设计
可以查看下Deferred模块会有这么一段代码
var tuples = [ // action, add listener, listener list, final state ["resolve", "done", jQuery.Callbacks("once memory"), "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), "rejected"], ["notify", "progress", jQuery.Callbacks("memory")] ],
这里设计到规范的接口,done | fail | progress方法都是通过jQuery.Callbacks("once memory") 或jQuery.Callbacks("memory")生成的。
实际上在Callback源码fire方法有一句 memory = options.memory && data;这样就很巧妙的缓存当前参数的值,提供给下一个使用,这个就是then,pipe链式数据的一个基础了,此刻的操作,我们把memory保存了这个数据的值
具体的请看Deferred这一章,因为jQuery很多东西都是设计给自己用的,但是这个思路与技巧是非常的nice!
jQuery源码解析(架构与依赖模块)
84047 学习 · 280 问题
相似问题