2

私はこの1か月間、JavaScriptを自分で学んでいますが、仕事がいたるところにあるため、一貫性はありません。ダウンタイムが発生したときの仕事は、営業チームの拡張機能に取り組むことです。

今のところ、解決できない特定の問題はありませんが、JavaScriptの関数には、まだ欠けているものがあると思わせる質問があります。

このコードを見て、私はそれについて私を混乱させるものを説明します:

function click(e) {
  var selection = e.target.id;
}

document.addEventListener('DOMContentLoaded', function () {
  var divs = document.querySelectorAll('div');
  for (var i = 0; i < divs.length; i++) {
    divs[i].addEventListener('click', click);
  }
});

したがって、このコードでは、click(e)の部分を除いて何が起こっているのかを理解しています。「e」はイベントオブジェクトですか?それがどのように通過したのか、そして「e」がそれを意味することをどのように知っているのかは私にはわかりません。eを「foo」に置き換えることができ、それでも機能すると思いますが、何が起こっているのかは明確ではありません。私はそれがこのコード行に関係していると確信しています:

divs[i].addEventListener('click', click);

しかし、私はそれをそのように実現するために舞台裏で何が起こっているのか理解していません。

別の例は、http ://developer.chrome.com/extensions/messaging.htmlで渡されるメッセージからのこれです:

contentscript.js
================
chrome.extension.sendMessage({greeting: "hello"}, function(response) {
  console.log(response.farewell);
});


background.html
===============
chrome.tabs.getSelected(null, function(tab) {
  chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
});

この中の「応答」は、他の例の「e」のように、どこから来ているのかわかりません。これがどのように機能するかを解明する助けをいただければ幸いです。私は自由に学ぶことができますが、これについての適切な説明は見つかりませんでした。

4

2 に答える 2

4

イベントオブジェクトは、ブラウザ自体によって関数を介して渡されます。

イベントがあり、それぞれのイベントハンドラーがアタッチされている場合、ブラウザーはそのイベントハンドラーを呼び出し、イベントに関するいくつかの(多かれ少なかれ)関連情報を含むイベントオブジェクトをイベントハンドラーに渡します。

したがって、最初の例に関しては、次のようになります。

まず、関数click( e )は通常の方法で定義されます。

その後、2つのイベントハンドラーが登録されます。

  1. イベントのためにDOMContentLoaded
  2. click複数の<div>要素のイベントの場合。

最初のハンドラーには無名関数が使用されます。

document.addEventListener('DOMContentLoaded', function () {
  // do stuff here
});

ここでは、おそらく必要ないため、イベントオブジェクトは省略されています。

2番目のケースでは、<div>要素はすべて同じイベントハンドラー、つまり。を取得しますclick(e)

divs[i].addEventListener('click', click);

ただし、ここでは、イベントオブジェクトは、関数本体内で必要になるため、関数によってパラメーターとしてキャプチャされます。

一般に、JavaScriptでは、関数宣言でも関数の呼び出しでもすべてのパラメーターを定義する必要はありません。必要なパラメータを定義するだけで、指定された順序で適用されます。そのため、最初のイベントハンドラーの定義では、イベントオブジェクトのパラメーターをエラーなしで省略できます。

于 2012-08-21T15:33:04.000 に答える
0

このclick関数は、クリックイベントに応答してブラウザによって呼び出されます。ブラウザは、最初の引数として適切なイベントオブジェクトを渡します。

また、あなたは正しいです、それはe何でもありえます。パラメータには、任意の(正式な)名前を付けることができます。

于 2012-08-21T15:33:33.930 に答える