4
我发现这个在D3:什么是JavaScript中的“防卫参考”?
function d3_dispatch_event(dispatch) {
var listeners = [],
listenerByName = new d3_Map;
function event() {
var z = listeners, // defensive reference
i = -1,
n = z.length,
l;
while (++i < n) if (l = z[i].on) l.apply(this, arguments);
return dispatch;
}
event.on = function(name, listener) {
...
什么是 “防御性的参考” 这里的意思?
它在JavaScript中没有意义。它只对该评论的作者有意义。 – 2014-11-08 18:24:24
@squint漂亮的渔获(#58线)。让我接受你的答案,如果你会创建它,并删除此评论:)。 – Leviathan 2014-11-08 18:55:04
我对此并不完全正确。看起来这条线是为了去除。虽然它可以确保删除项目仍然可以访问(我想这就是他们想要的),[第63行](https://github.com/mbostock/d3/blob/master/src/event/dispatch.js# L63)确实在'listeners'中执行'.push()'。但是,由于他们为'while'循环缓存'.length',所以添加的项目将不会被触及。所以我想这只是为了删除,以便删除的处理程序仍然会触发。继续并给出答案。我不确定我是否分析过所有角度,我需要重新开始工作! :-) – 2014-11-08 19:03:33