如何在coffeescript循环中捕获异步函数的变量?

时间:2011-09-23 15:08:44

标签: javascript loops coffeescript

我正在循环一个对象并尝试为对应于对象中每个项目的每个按钮添加一个onclick事件。

for id of obj
    button = $("#my_button"+ id)
    button.click(->  console.log id) 

通过此循环, 每个 按钮都会记录循环的 最后 ID。如何让每个按钮记录正确的相应ID?

1 个答案:

答案 0 :(得分:9)

这是一个经典的JavaScript问题。标准解决方案是将每个循环迭代包装在一个匿名函数中,并将id传递给该函数;这样,您传递给click的函数将会看到该特定id实例。

CoffeeScript为此提供了一个很好的语法:do (id) -> ...编译为(function(id){ ... })(id)。所以,对于你的例子,你要写

for id of obj
  do (id) ->
    button = $("#my_button"+ id)
    button.click(->  console.log id)

我在文章A CoffeeScript Intervention中谈到do