在element.bind中实现闭包 - angular

时间:2014-12-26 13:18:37

标签: javascript angularjs

我将事件绑定到指令中的元素,并希望传递循环变量。 如何使用闭包来做到这一点?

for(var i=0; i<events.length; i++) {
     switch(events[i]) {
               case 'focus' :
                 var m = i;
                 element.bind('focus', function(event) {
                    console.log(m);
                 });
               break;

               case 'blur' :
                 var n = i;
                 element.bind('blur', function(event) {
                    console.log(n);
                 });
               break;        
     }
 }

在上面的代码中,我使用变量m和n,但是如果没有它们怎么办呢?

我也试过

 element.bind('focus', function(num, event) {
    console.log(num);
  }(i));

但它没有工作

演示:http://plnkr.co/edit/gwthMUkXXCQfZYr4bHLg?p=preview

1 个答案:

答案 0 :(得分:2)

创建一个单独的函数,您可以通过传递i来调用它并返回一个函数,从而创建一个闭包,它具有您在上下文中传递的数字。

function callback(num) {
   return function(event) {
     console.log(num);
   }
}

现在你可以像这样绑定它

element.bind('focus', callback(i));