イベントがバインドされたときに利用可能だったコールバック関数内の値を確認できるようにしたい。イベントがバインドされたときに関数が定義されている場合、関数内でクロージャーを介して値を確認できます。
var number = 777;
$('span').click(function() {
alert(number); //alerts 777 - available through closure
});
しかし、'number' 変数が使用できなかったときに関数が以前に定義されていた場合、このトリックは機能しません。関数が次のようにイベントにバインドされている場合、関数 number_alerter は 'number' 変数を参照できません。
$('span').click(number_alerter);
唯一の解決策は、「number」引数を使用して関数を定義し、「number」変数を関数に渡すことです。
//function defined somewhere earlier
function number_alerter(e, number) {
alert(number);
}
...
//current scope
var number = 777;
$('span').on('click', function(e) {
return number_alerter(e, number);
});
私の質問は、この変数を「number_alerter」関数に渡す別の方法があるかどうかです。多分それは閉鎖によっても可能ですか?
編集:上記が必要になる可能性がある実際のケースは次のとおりです。私には2つの機能があります:
array_sort(array, compare_function)
compare_values(value1, value2, case_insensitive)
関数 array_sort は、compare_values 関数に 2 つの値のみを渡しますが、関数 array_sort を使用する場合は、3 番目の大文字と小文字を区別しないパラメーターも渡す必要があります。その方法を知っている唯一の方法は、compare_values 関数を別の関数にラップすることです。
var my_array = [];
var case_insensitive = true;
var wrapper = function(value1, value2) {
compare_values(value1, value2, case_insensitive)
}
array_sort(my_array, wrapper);
他に方法はありますか?