CoffeeScript中for循环的变量作用域是什么?

5
array = [1,2,3,4]

for num in array
    //do something

在函数的其余部分中,num的值是多少?num是否局限于循环范围内?


当你运行它时发生了什么? - user541686
你可以尝试一下 CoffeeScript 的东西,并在这里查看编译结果 here =D - epidemian
1个回答

17
不,num 不会被限定在循环中。正如 @epidemian 指出的那样,在编译后的 JS 中,它是当前作用域变量,因此您也可以在函数的其余部分(例如当前作用域的其余部分)中访问它。
但是请注意,在循环内定义函数回调时要小心:
array = [1, 2, 3]

for num in array
  setTimeout (() -> console.log num), 1

输出

3
3
3

要在回调函数中捕获当前变量,应该使用do来调用函数:

for num in array
    do (num) ->
        setTimeout (() -> console.log num), 1

我在这个错误中创建了一些令人愉悦的竞态条件,请小心。 - wmarbut
我也刚被这个问题困扰了。我觉得 do (num) -> 应该是默认行为。 - ndbroadbent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接