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