4

このコードの違いは何ですか:

$('.percentage_field').change(function() {
    update_percentage();
});
$('.inspect1').change(function(){
    show_hide_targets();
});

そして、このコード:

$('.percentage_field').change(
    update_percentage
);

$('.inspect1').change(
    show_hide_targets
);
4

1 に答える 1

4

イベントに応答してコールバックが実行されるとthis、関数内で、イベントのターゲットである DOM 要素が設定されます。

最初の例では、匿名関数はthisターゲット要素の を取得しますが、それthis内部関数呼び出しには転送されません。代わりに、内部関数this は呼び出された方法に従って で実行されます。(ここでは、直接の「生の」呼び出し (つまり、メンバー関数として呼び出されていない) であるため、非スクリプト モードでthisequal toで実行されます。)window

2番目の例では、関数update_percentageとターゲット要素のを直接show_hide_targets取得します。this

を考えてみましょう:

function sayThis() { alert(this); }
someElem.addEventListener("click", function() { sayThis() });
someElem.addEventListener("click", sayThis);
someElem.addEventListener("click", function() { sayThis.call(this) });

1 つ目はアラートwindow(またはundefined厳密モード) です。2 番目は、リスナーが起動した要素に警告します。3 番目のリスナーは無名関数を使用しますが、.call(this)元のリスナーを内部関数に転送するを使用して内部関数を呼び出しますthis

于 2013-01-31T14:01:53.360 に答える