获取Coffeescript以在FOR循环中创建局部变量

获取Coffeescript以在FOR循环中创建局部变量,coffeescript,Coffeescript,如何将dealViewItem放入FOR循环的范围?目前,dealViewItem的作用域在它之外,所有my事件侦听器都添加到最后一个dealViewItem for deal in dealArray dealViewItem = dealViewFactory.DealDetail(deal) dealViewItem.addEventListener 'click', -> dealCart.push(deal.dealId)

如何将
dealViewItem
放入FOR循环的范围?目前,dealViewItem的作用域在它之外,所有my事件侦听器都添加到最后一个dealViewItem

  for deal in dealArray
        dealViewItem = dealViewFactory.DealDetail(deal)
        dealViewItem.addEventListener 'click', ->
          dealCart.push(deal.dealId)
          dealViewItem.setAddedToCart()
          btnTakeDeals.setEnabled = true
        dealHolder.add(dealViewItem)

这就是
do
关键字的作用。它将立即运行一个函数,任何与其中一个参数同名的局部变量都将被传递到该函数中,以确保正确的闭包范围

for deal in dealArray
  do (deal) ->
    dealViewItem = dealViewFactory.DealDetail(deal)
    dealViewItem.addEventListener 'click', ->
      dealCart.push(deal.dealId)
      dealViewItem.setAddedToCart()
      btnTakeDeals.setEnabled = true
    dealHolder.add(dealViewItem)
查看


do
也可以在循环外用于自执行函数

#coffeescript
do ->
  foo = 'bar'

// javascript
(function() {
  var foo;
  return foo = bar;
})();

阅读一下哪个描述了javascript作用域,哪个coffeescript继承了哪个,然后您可以看到do做了什么以及为什么会出现,如Alexs answererr所示,明确地说,javascript没有块作用域,只是全局和函数作用域DailyJS链接断开了。其他一些链接-和