web-dev-qa-db-ja.com

イベントは、コールバックチェーン内のどこからでもアクセスできるグローバル変数ですか?

DOMとjavascriptを使用してイベントリスナーをいじっていたところ、次のことに気づきました。

function chained(msg) {
    console.log(msg, event);
}

function onClick() {
    chained('the body was clicked');
}

document.body.addEventListener('click', onClick);

今面白いこと...これは出力されます:

「本体がクリックされました、(MouseEvent)」

それから私は尋ねます、なぜですか? chained呼び出しで送信せずにイベントオブジェクトを渡すにはどうすればよいですか?

function chained(msg) {
    console.log(msg, namedEventObj); //throw error namedEventObj is not defined
}

function onClick(namedEventObj) {
    console.log(event); //outputs (MouseEvent);
    console.log(nameEventObj); //outputs (MouseEvent);
    chained('the body was clicked');
}

document.body.addEventListener('click', onClick);

onClick関数で渡されるイベントobjをnamedEventObjとして宣言した場合でも、onClickでのみ使用でき、chained関数では使用できません。私はこれを手に入れました、そしてこれは私にとって理にかなっています...しかし間違いなくevent関数で利用できるchained変数ではありません。

なぜそれがこのように振る舞うのか誰もが知っていますか?

私が考えることができる唯一のことは、イベントは実際にはwindow.eventそしてそれはいくつかのイベントディスパッチとイベントのときにそれ自体を利用可能にします...しかしそれはそれがトリガーされたときにイベントと同時に呼び出された場合、どの要素もそのイベント情報を取得できることを意味しますか?

私はChrome 11.0.xを使用しています

26
zanona

window.eventを介して現在のイベントにアクセスできます。 eventを使用するだけで、暗黙的にwindow.eventにアクセスします。

26
Nathan Romano