将计数器传递给匿名函数

时间:2013-06-09 17:17:51

标签: javascript jquery

有点基本问题,但如何将不同的值传递给匿名函数?

也许有更好的方法来表达这一点......我的意思是,考虑下面的代码......假设我有一堆可点击的项目,如somediv1,somediv2等等。

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

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

无论我点击哪个div,它总是会提醒30.我想点击somediv1来提醒1,somediv2提醒2,依此类推

1 个答案:

答案 0 :(得分:5)

调用回调时idx的值为循环结束。

这是一个标准解决方案:

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

立即调用的中间函数在执行循环时存储idx的值。

也许我可以通过在JavaScript中记住它来使其更清晰

  • 变量的范围是函数或全局范围(绝不是简单的块)
  • 一个函数保持一个指向声明范围的指针,并且可以在执行时使用该范围的变量(这称为闭包)