3

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

也许有更好的表达方式......我的意思是,考虑下面的代码......假设我有一堆可点击的项目,其 id 像 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,依此类推

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 回答