循环中coffeescript的变量范围?

fan*_*ncy 5 coffeescript

array = [1,2,3,4]

for num in array
    //do something
Run Code Online (Sandbox Code Playgroud)

num在函数的其余部分的上下文中有什么价值?是否num限制循环?

zby*_*our 17

不,num不会限制循环.正如您在编译的JS中看到的那样(如@epidemian指出的那样)它是当前的范围变量,因此您也可以在函数的其余部分(例如当前范围的其余部分)访问它.

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

array = [1, 2, 3]

for num in array
  setTimeout (() -> console.log num), 1
Run Code Online (Sandbox Code Playgroud)

输出

3
3
3
Run Code Online (Sandbox Code Playgroud)

要捕获回调内的当前变量,您应该使用do简单地调用该函数:

for num in array
    do (num) ->
        setTimeout (() -> console.log num), 1
Run Code Online (Sandbox Code Playgroud)