增加价值+;在CoffeeScript中的for循环中为1?

增加价值+;在CoffeeScript中的for循环中为1?,coffeescript,Coffeescript,我试过这个: posts = Posts.find({},   sort:     position: 1 ).fetch() for post in posts i = 1 Posts.update post._id, $set: position: i i++ 但是所有的帖子最终都是排名1。我想要的是1,2,3,4等等 我做错了什么?您可以使用do在正确的时间强制对I进行评估(而不是引用)。从: 当使用JavaScript循环生成函数时,通常会插入一个闭包

我试过这个:

posts = Posts.find({},
  sort:
    position: 1
).fetch()

for post in posts
  i = 1
  Posts.update post._id,
    $set:
      position: i
  i++
但是所有的帖子最终都是排名1。我想要的是1,2,3,4等等


我做错了什么?

您可以使用
do
在正确的时间强制对
I
进行评估(而不是引用)。从:

当使用JavaScript循环生成函数时,通常会插入一个闭包包装器,以确保循环变量被关闭,并且所有生成的函数不只是共享最终值。CoffeeScript提供
do
关键字,该关键字立即调用传递的函数,转发任何参数

这正是你面临的情况。您还可以让CoffeeScript通过使用
for
for的
for e,i in…
形式来处理循环计数器:

for post, i in posts
  do (post, i) ->
    Posts.update post._id,
      $set:
        position: i + 1
您还可以执行以下操作:

posts.forEach (post, i) ->
    Posts.update post._id,
        $set:
            position: i + 1

您的
i=1
在循环中。。。每次迭代都将其设置为1。