2

バインド機能を持つパッケージ/プラグインを使用している状況があります。

myevents がコールバックを起動するときのフィルターであるコードを使用して bind を呼び出します。このシナリオでは、バインドのために 3 つの呼び出しが行われます。1 つはパラメーター 't1'、2 番目は 't2'、3 番目は 't3' です。

myevents オブジェクトからイベントが発生すると、(コードに応じて) data パラメータを使用してコールバックが呼び出されます。

私の問題は、コールバック関数が呼び出されたときです。最初にバインドされたときのループのインデックス番号を知る必要があります。たとえば、アラートステートメントに i 変数がありますが、コールバックが最終的に起動されたときに保存する値を取得する方法がわかりません。

これを達成するには、「関数(データ、i)」の組み合わせがいくつかあるようです。

bindList = array('t1','t2','t3');

for (var i = 0; i < bindList.length; i++) {
        myevents.bind(bindList[i], function(data) {
            alert('data arrive on item ' + i + ': ' + data);
        });
    }

助けていただければ幸いです。ありがとう。

4

1 に答える 1

5

クロージャーを使用します。JS 変数は「関数スコープ」であるため、iat 0 はi反復の任意の時点で同じものを参照します。iバインディング コードがループではなくクロージャを参照するように、反復ごとにスコープを作成する必要がありますi

for (var i = 0; i < bindList.length; i++) {
  (function(i){
    myevents.bind(bindList[i], function(data) {
      alert('data arrive on item ' + i + ': ' + data);
    });
  }(i));
}
于 2013-04-24T20:42:44.083 に答える