3

基本的な質問ですが、匿名関数に個別の値を渡すにはどうすればよいですか?

たぶん、これを表現するより良い方法があるでしょう...つまり、次のコードを検討してください... somediv1、somediv2などのIDを持つクリック可能なアイテムがたくさんあると仮定します.

for(idx = 1; idx < 30; idx++) {
    $("#somediv" + idx).on('click', function() {foo(idx); });
}

function foo(inIDX) {
    alert(inIDX);
}

どの div をクリックしても、常に 30 のアラートが表示されます。somediv1 をクリックしてアラート 1 に、somediv2 をクリックしてアラート 2 などにします。

4

1 に答える 1

5

コールバックが呼び出されたときはidx、ループの終了の値を持ちます。

標準的な解決策は次のとおりです。

for(idx = 1; idx < 30; idx++) {
   (function(i){
    $("#somediv" + idx).on('click', function() {foo(i); });
   })(idx);
}

すぐに呼び出される中間関数はidx、ループ実行時の値を格納します。

JavaScriptでそれを覚えておくことで、より明確になるかもしれません

  • 変数のスコープは、関数またはグローバル スコープのいずれかです (決して単純なブロックではありません)。
  • 関数は、宣言されたスコープへのポインターを保持し、実行時にこのスコープの変数を使用できます (これはクロージャーと呼ばれます)。
于 2013-06-09T17:18:45.457 に答える