イベントに応答してコールバックが実行されると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。