【发布时间】:2015-07-14 06:52:00
【问题描述】:
我正在阅读事件模块的 Backbone.js 源代码,这段代码让我感到困惑:
var triggerEvents = function(events, args) {
var ev, i = -1,
l = events.length,
a1 = args[0],
a2 = args[1],
a3 = args[2];
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, a1);
return;
case 2:
while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1, a2);
return;
case 3:
while (++i < l)(ev = events[i]).callback.call(ev.ctx, a1, a2, a3);
return;
default:
while (++i < l)(ev = events[i]).callback.apply(ev.ctx, args);
return;
}
};
我想知道我们为什么要确定args.length?为什么不这样写:
var triggerEvents = function(events, args) {
var ev, i = -1,
while (++i < l)(ev = events[i]).callback.apply(ev.ctx, args);
};
所以主要问题是:我们为什么要确定args.length?为什么不只用一个while (++i < l)(ev = events[i]).callback.apply(ev.ctx, args); 替换所有call?
【问题讨论】:
标签: javascript jquery backbone.js