私は、(a)パラメータを必要とするイベントハンドラを持っており、(b)はwindow.setTimeout
でコールバック関数を呼び出しています。私はbind
を使ってイベントハンドラをアタッチします。JavaScript:コールバックとパラメータを持つイベントリスナー
呼び出された関数は、追加のパラメータとともに呼び出されます。私はcallback(parameters)
と `callback.call(this、パラメータ)の両方を試しました。以下は
var element=document.querySelector('h1');
element.onclick=function(e) {
delay(test.bind(element,'from original','also from original',e));
}
function test(a,b,c,d,e) {
alert(this); // element
alert(a); // from original
alert(b); // also from original
alert(c); // event
alert(d); // from delayed
alert(e); // also from delayed
}
function delay(callback) {
window.setTimeout(delayed,100);
function delayed() {
// callback.call(this,'from delayed','also from delayed');
callback('from delayed','also from delayed');
}
}
I私のテスト、私は、コールバックは、次の順序でパラメータを取得することを見つける:元の関数
- パラメータ
- コールバックを呼び出す関数のパラメータ
さらに、私は、コールバック関数は、私は何も(でもnull
)に設定this
引数で.call
を使用してそれを呼び出す場合でも、元の要素へthis
セットを持っていることがわかります。
私はこの確実性を扱うことができますが、これが正式にどのように処理されるのか混乱しています。コールバックを持つイベントリスナーについて説明しているドキュメントでは、何も見つかりません。
質問です:パラメータの順序が文書化されている
- ?
this
はどこから来たのですか?そして、どうしてそれを変更しようとする試みを無視しているように見えますか?
おかげ