问答详情
源自:3-9 memory的设计

memory主要用途是?

目前但看代码能看懂,但不明白具体有什么作用。加入之后立即调用之前的参数,什么场合有用?

提问者:贝尔_1987 2015-01-04 23:33

个回答

  • 艾伦Aaron
    2015-01-05 08:19:13
    已采纳

    首先,回调函数是从异步队列分离出来的,那么就是无缝贴合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!