Callbacks 是jQuery 1.7之后新加的一个工具,用于管理callback lists(函数数组)
作为码农,经常被灌输这样的逻辑:
真正厉害的不是写多么复杂的代码,而是写简单易懂的代码。
不明就里的人则会把她作为衡量代码质量的准则,并抓住每一个抱怨的机会说道,“这代码真复杂,是给人看的吗!”。
关于Callbacks的基本使用,可以移步到Callbacks API
下面说一下创建Callbacks对象时使用的四个参数类型
- once 确保只能fire一次,由全局变量fired和stack确保(fired记录是否之前执行过,stack保存下一次执行的上下文和函数参数)
- memory 确保之后添加的函数可以被前一次fire时使用的参数调用一次。在执行add操作时触发,由全局变量memory维护前一次调用的函数参数
- unique 确保add操作不会加入相同的函数
- stopOnFalse 确保在fire时,如果队列中有函数返回false,则程序在该函数处退出,之后的函数也不会被执行。
理解了上面的内容还不足以看明白代码,因为上面的四个类型还可以进行组合使用。他们之间还存在相互关联
- unique选项,在add操作时确保队列中无重复,和后续的执行无关联,因此和其它选项之间不存在交互
- stopOnFalse和memory组合时的逻辑应该是: stopOnFalse && fn()==false => memory=false,这样确保了后续的add操作不会执行fire,进而维护了stopOnFalse的语义。
- once和memory组合时不存在冲突,但是作者在fire结束时,将list清空
- once memory和stopOnFalse的组合,当触发fn()==false的函数没有出现时,执行情况和once memory一致,add新的函数会存在上一次的记忆,当令fn()==false的函数出现后,执行disable()操作=>list = stack = memory = undefined;