jQuery源码解析----回调函数"memory"场景的实现

来源:互联网 发布:网络服务器连接失败 编辑:程序博客网 时间:2024/05/16 05:02
//memory的设计
memory:包吃以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调。
回调函数是从异步队列Deferred分离出来的,所以很多的接口设计是为了契合Deferred接口,memory用的很多,这个缓存的设计这里提及一下主要是用来实现Deferred的异步收集与pipe管道风格的数据传递的,具体在Deferred有详解,这里大概了解一下作用范围。
memory设计需要解决的问题是:
(1)如何保持上一个参数
(2)add后如何执行

代码模拟实现:

function Callbacks(options){var list = [];var self;var firingStart;var memory;function _fire(data){memory = options ==='memory'&&data;firingIndex = firingStart||0;firingStart = 0;firingLength = list.length;for(;list&&firingIndex<firingLength;firingIndex++){list[firingIndex](data);}}self = {add:function(fn){var start = list.length;list.push(fn);if(memory){firingStart = start;_fire(memory);}},fire:function(args){}}return self;}

私有变量memory缓存这上一个参数的属性,我们靠firingStart用来定位通过add增加的回到数据的索引。在遍历的时候
直接通过firingStart的起使索引定位,然后传递memory的参数,而且实现这种"保持以前的值"的设计。

0 0
原创粉丝点击