2016-10-01 13 views
1

次の匿名JS関数のパラメータに「e」が含まれているのはなぜですか?私はそれが出来事だと思っていますが、それはどうして救われましたか?この "e"はどこにも言及されていませんが、このイベントリスナーとそれが使用するハンドラにあります。イベントリスナーの匿名関数

document.body.addEventListener("keyup", function(e) { 
keys[e.keyCode] = false; 
}); 
+0

'e'は、イベントが発生したときに、呼び出し元関数によって渡されますパラメータです。 'body'要素の' keyup'イベントにすべての関数が付加されている場所があると考えてみてください。このイベントが発生するたびに、この関数は 'callback(eventFired)'のような動作をします。 –

+0

だから、ここにはデフォルトライブラリやユニバーサルライブラリのようなものがあり、匿名の人がこの引数を必要とする代わりに「代わりに」呼ばれる関数があります。 –

+0

コードを実行しているブラウザで、それを処理する責任があります。この場合、それは1つの議論を必要とするのではありません。それを使うかどうかはあなた次第です。呼び出し側は、コールバック関数に必要な引数(この場合は 'event')を追加します。したがって、あなたが提供した関数にパラメータを置くことでそれを使うことができます。 –

答えて

0

匿名機能は、keyupイベントが発生した瞬間と呼ばれることに注意してください。無名関数は、「ねえ、あなたが私に電話をするときに、私に議論を与えてください」と言う。したがって、keyupイベントが発生すると、ブラウザはイベントオブジェクトとなる引数を持つ無名関数を呼び出します。イベントオブジェクトは、イベントが発生した瞬間に作成されます。

+1

名前付きパラメータが存在しても、ブラウザの動作は変更されません。イベントオブジェクトは常にハンドラに渡されます。 – Andreas

+0

ありがとうございます。私はそれを知っていますが、著者が質問していたことに焦点を当てるために、技術的な騒音を私の反応から除外したかったのです。 – kevin628

+0

どちらもありがとうございました。私にはとても分かりやすいので、これは「e」でなければならないことを意味します。私は右のようなプレースホルダを使用できますか? –

0

メソッドaddAventListenerは、入力として関数を受け取り、イベントが発生するたびに、その関数をイベントオブジェクトとともに呼び出します。

これを説明する簡単な例を追加しました。

function EventCreator() { 
 
    var listeners = []; 
 
    var counter = 0; 
 
    setInterval(function() { 
 
    counter++; 
 
    listeners.forEach(function(listener) { 
 
     listener(counter); 
 
    }); 
 
    }, 1000); 
 

 
    this.addListener = function(listener) { 
 
    listeners.push(listener); 
 
    }; 
 
} 
 

 
var eventCreator = new EventCreator(); 
 

 
eventCreator.addListener(function(e) { 
 
    console.log("An event has occured: ", e); 
 
});

ドキュメント:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

+0

おかげですが、ちょうど質問、なぜisnt addlistener関数は、設定されたインターバル機能の内部?これが実行されるたびに実行する必要はありませんか? –

+0

add listener関数は、リスナーをリストに追加するだけです。イベントが発生すると、リスナーのリストを調べ、新しいイベント(この例ではカウンタ)を使用してリスナーを1つずつ呼び出します。 addListenerにパラメータとして送られた関数は一度に呼び出されず、イベントが発生するまでリストに格納され、呼び出されます。 – knutesten

+0

おかあさんありがとう! –