关于jQery中$.Callbacks()的理解
$.Callbacks()主要使用了回调,而说到回调又不得不说javascript的事件循环机制了。
所以想了解回调最好先看看js运行机制。
$.Callbacks()可以理解为创建一个回调队列
var cd = $.Callbacks() function a (){ console.log('a'); } function b (){ console.log('b'); }
cd.add(a,b); cd.fire();
//a
//b
上面的代码中我们创建了一个队列,然后用add的方式往里面添加两个回调函数,最后fire让这个回调队列执行。
而在fire()中是可以添加参数的
var cd = $.Callbacks() function a (x,y){ console.log('a',x,y); } function b (x,y){ console.log('b',x,y); } cd.add(a,b); cd.fire(10,20); //a,10,20 //b,10,20
callbacks()中可以有三个参数,once、memory、unique、stopOnFalse,让我们分别来看看作用
var cd = $.Callbacks("once") function a (x,y){ console.log('a',x,y); } function b (x,y){ console.log('b',x,y); } cd.add(a); cd.fire(10,20); cd.add(b); cd.fire(10,20) //a,10,20
once:确保这个回调只执行一次(只能够被fire一次)
var cd = $.Callbacks("memory") function a (x,y){ console.log('a',x,y); } function b (x,y){ console.log('b',x,y); } cd.add(a);
cd.fire(10,20);
cd.add(b); //a,10,20 //b,10,20
memory:缓存上一次fire时的参数值,当add()添加回调函数时,直接用上一次的参数值立刻调用新加入的回调函数(拥有记忆功能)
var cd = $.Callbacks("unique") function a (x,y){ console.log('a',x,y); } function b (x,y){ console.log('b',x,y); } cd.add(a,b); cd.add(a,b); cd.fire(10,20); //a,10,20 //b,10,20
unique:一个回调只会被添加一次,不会重复添加
var cd = $.Callbacks("stopOnFalse") function a (x,y){ console.log('a',x,y); return false; } function b (x,y){ console.log('b',x,y); } cd.add(a,b); cd.fire(10,20); //a,10,20
stopOnFalse:某个回调函数返回false之后中断后面的回调函数