コールバック関数をプライベート名前空間に記述し、参照によって呼び出すのが好きです。例えば
var myCallback = function() {
};
// ... somewhere else in the class.
SomeOtherObject.doSomething(myCallback);
これにより、コードがより整然とし、より拡張可能になります。ただし、元の関数からコールバックにパラメーターを渡す必要がある場合は、面倒になり、コールバック参照をクロージャーで囲む必要があります。例えば
var myCallback = function(a_var, another_var) {
};
// ... somewhere else in the class.
a_var = "something";
SomeOtherObject.doSomething(function(another_var) {
myCallback(a_var, another_var);
};
これにより、コールバックで 1 回ではなく 2 回の関数呼び出しが必要になり、オーバーヘッドが生じます。それはまた、クロージャー用に文書化されていない匿名関数があること、または両方の関数を文書化していることも意味します。(パラメーター定義ほど面倒なのは、関数定義の欠落ではありません。) コールバックが小さい場合 (優れた関数と同様)、それをプライベート スコープに置く価値がないように思われます。
これを行う最善の方法は何ですか?