如何使用jquery将变量参数传递给匿名函数?

Mik*_*ike 11 javascript jquery closures

谁能告诉我这里做错了什么?我在下面简化了它,但我基本上试图创建一个列表,并有一个click事件,它引用一个仅在循环中可用的变量.

for (var i = 0; i < data.length; i++) {                                                                           
  $newRow = $(rowFormat);                    
  $('a:first', $newRow).click(function(i){
    return function() { alert(i); } 
  });
  $list.append($newRow);      
}
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 14

你没有调用外部函数.

$('a:first', $newRow).click(function(j){
  return function() { alert(j); } 
}(i)); /* Pay special attention to this line, it is where the major change is */
Run Code Online (Sandbox Code Playgroud)

正如TJ Crowder所提到的,你可以将工厂移出循环.

function my_factory(j) {
    return function() { 
        alert(j); 
    }; 
}

$('a:first', $newRow).click(my_factory(i));
Run Code Online (Sandbox Code Playgroud)

  • +1 @Mike:建议您将工厂功能移出循环; 你不必要地创建了一堆额外的工厂函数,你只需要一个(为`click`创建各种函数).还建议查看事件委派,而不是为每一行创建单独的事件处理程序. (4认同)
  • 正是我需要的.如果有其他人遇到这个,我使用这个网站来更好地理解闭包和函数工厂:https://developer.mozilla.org/en/JavaScript/Guide/Closures (2认同)