機能コード(source code on github):この行のnodejs/events.jsのemitMany関数のリスナー配列を複製する理由は何ですか?
function emitMany(handler, isFn, self, args) {
if (isFn)
handler.apply(self, args);
else {
var len = handler.length;
var listeners = arrayClone(handler, len);
for (var i = 0; i < len; ++i)
listeners[i].apply(self, args);
}
}
:handler
この範囲で指定リスナーの配列は、クローニングされ、そしてそのクローンが割り当てられている
var listeners = arrayClone(handler, len);
新しい変数listeners
となります。私はこれが何のために役に立つのだろうかと思います。
リスナーが自分自身をリストから削除する可能性があり、そのアクションがforループ内のカウンタを破壊する可能性があると思われます(リスト項目のインデックスは削除後に変更されますが、カウンタi
は盲目的にそれ)。
私の説明は正しいのでしょうか、それとも何か他のものがありますか?