coffeescript for loop中的变量范围?

coffeescript for loop中的变量范围?,coffeescript,Coffeescript,在函数其余部分的上下文中,num的值是多少?num是否设置了循环的作用域?否,num未设置循环的作用域。正如您在编译的JS中所看到的(正如@epidemian指出的),它是当前作用域变量,因此您也可以在函数的其余部分(例如,当前作用域的其余部分)访问它 但在循环内定义函数回调时要小心: array = [1,2,3,4] for num in array //do something 输出 array = [1, 2, 3] for num in array setTimeou

在函数其余部分的上下文中,
num
的值是多少?
num
是否设置了循环的作用域?

否,
num
未设置循环的作用域。正如您在编译的JS中所看到的(正如@epidemian指出的),它是当前作用域变量,因此您也可以在函数的其余部分(例如,当前作用域的其余部分)访问它

但在循环内定义函数回调时要小心:

array = [1,2,3,4]

for num in array
    //do something
输出

array = [1, 2, 3]

for num in array
  setTimeout (() -> console.log num), 1
要捕获回调中的当前变量,应使用
do
,它只调用函数:

3
3
3

当你运行它的时候发生了什么?你可以试试CoffeeScript的东西,然后看到编译的结果=我已经用这个错误创造了一些令人愉快的比赛条件,厌倦了也只是被它咬了一口。我觉得
do(num)->
应该是默认行为。
for num in array
    do (num) ->
        setTimeout (() -> console.log num), 1