(function (root) {
var optionsCache = {};
var _ = {
callbacks: function (options) {
options = typeof options === "string" ? (optionsCache[options] || createOptions(options)) : {};
//将options变成对象;
var list = [];//存储回调函数的参数;
var index,length,testting,memory,start,starts ;
memory = options.memory && data;
var fire = function(data){
index = starts||0;//先赋值给index;
start = 0;//start归零;
testting = true;//对应once;只能修改一次;
length = list.length;
for(;index < length;index++){
if(list[index].apply(data[0], data[1]) === false && options.stopOnfalse){
break;
}
}
}
var self={
add:function(){
var args = Array.prototype.slice.call(arguments);
start = list.length;//再次添加之前,list长度;
args.forEach(function(fn){
if(toString.call(fn) ==="[object Function]"){
list.push(fn);
}
});
if(memory){
starts = start;
fire(memory);
}
},
fireWith:function(){
var args = [context, arguments];
if(!options.once || !testting){//options.once为true;!options.once为false; !testting !(undefined)
fire(args);
}
},
fire:function(){
self.fireWith(this, arguments);
}
}
}
}
function createOptions(options) {
var object = {};
options.split(/\s+/).forEach(element => {
object[element] = true;
});
return object;
}
root._=_
})(window)