別のパラメーターを受け入れるように Array.sort() を拡張したいと考えています。この質問にはクロージャーを使用した解決策があるため、このコードは機能します。
var create_comparator = function(c) {
return function(a,b) { console.log(c); return a-b };
};
arr.sort( create_comparator('test') );
ただし、私の場合、次のように関数が既に定義されています。
var myComp1 = function(a,b) { console.log(c); return a-b };
事前定義された関数を返すことは機能しません:
var create_comparator = function(sortfn, c) {
// Uncaught ReferenceError: c is not defined
return sortfn;
};
var arr = [7, 4, 9, 2, 1];
arr.sort( create_comparator(myComp1, 'test') );
c
これは、元の関数が作成されたときに定義されていなかったためだと思います。新しいクロージャーを作成しようとreturn function(a,b) { sortfn(a,b); }
しましたが、それも機能しません。
このセットアップを使用して、事前定義された関数で追加のパラメーターを使用できるようにすることは可能ですか? 問題の別の解決策はありますか?