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