}
}
}
return -1;
}
}();
var Callbacks = function (option) {
option = toString.call(option) === ‘[object Object]’ ? option : {};
//使用闭包,因为每个新建的callbacks都有自己的状态
var list = [], //回调列表
_list = [], //如果锁定这个callbacks对象,则清空list,将原list置入_list
fired, //是否执行过
firingStart, //当前回调函数列表执行的函数索引(起点)
firingLength, //回调函数的数组长度
auto, //标志是否自动执行,如果需要自动执行,则auto记忆着最后一次回调的参数(最后一次fire的参数),这是一个很诡异的且奇葩的用法
//这个变量用法很诡异和犀利,既包含了是否指定执行的标志,又记录了数据
//这个auto配合once简直就是丧心病狂:【第一次】执行了fire后才会自动执行,配合once可以做到:一次执行,后面不再追加和执行代码,保证了一组回调数据的稳定和安全
stack = !option.once && [], //一个callbacks栈,如果当前正在执行回调数组,而在执行中又新添了回调函数,那么把新的回调函数,那么新的回调函数都会压入该栈
firing = false, //callbacks是否正在工作/执行
//触发回调函数
fire = function (data) {
//注意这个data是个数组,如果配置了auto模式,那么auto永远不会为false,因为auto会是个数组










