code: function () {
                      var index = 0;
  
                      while (index < fireLength) {
  
                          if ([].indexOf.call(arguments, list[index]) !== -1) {
  
                              // 从队列中删除当前回调
                              list.splice(index, 1);
  
                              // 如果当前回调队列被多层嵌套执行
                              // 上几层队列也可能会受到影响
                              if (firing) {
                                  if (fireQueue.length) {
                                      fireQueue.forEach(function (value, key) {
                                          // 被删除的回调位于当前索引位置前面
                                          // 当前索引位置自减1
                                          if (index <= value) {
                                              fireQueue[key]--;
                                          }
                                      });
                                  }
  
                                  // 如果被删除的函数的索引位置在fireIndex的前面
                                  // fireIndex自减1
  
                                  if (index <= fireIndex) {
                                      fireIndex--;
                                  }
                              }
  
                              // 回调列表长度改变
                              fireLength--;
                          } else {
                              index++;
                          }
                      }
  
                      return this;
                  }
docs: 从回调列表中移除掉传入的函数
  @name Callbacks#remove
  @function
  @example
  
  var foo = function () {
  console.log('nah');
  };
  
  var callbacks = Callbacks();
  callbacks.add(foo);
  
  // 移除回调函数 `foo`
  callbacks.remove(foo);
  callbacks.fire();
  // 回调列表内的回调函数 `foo` 已被移除，不会执行该回调