我正在阅读 Backbone.js 源代码,对此感到困惑
var triggerEvents = function(events, args) {
var ev, i = -1, l = events.length;
switch (args.length) {
case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx);
return;
case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, args[0]);
return;
case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, args[0], args[1]);
return;
case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, args[0], args[1], args[2]);
return;
default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);
}
};
我有几个问题-
- 为什么这是触发事件的优化(如注释源所说)?
- ev.ctx 是什么?
- 什么是.callback()?
这种结构意味着,如果有机会出于速度的考虑始终使用 call 而不是 apply,因为该函数的结构似乎在说“如果我知道有多少个 args 则使用 call,而不是使用 apply”,当一个人可以一直使用 apply 时。
简而言之,我不确定这个函数的目的是什么,以及为什么按照它的编写方式编写它,如果有人能告诉我它会很棒!