【问题标题】:Variable scope in coffeescript for loop?coffeescript for循环中的变量范围?
【发布时间】:2012-05-30 16:17:24
【问题描述】:
array = [1,2,3,4]

for num in array
    //do something

在函数其余部分的上下文中,num 的值是多少? num 是否被限定在循环范围内?

【问题讨论】:

  • 你运行它时发生了什么?
  • 你可以试试 CoffeeScript 的东西,看看编译结果here =D

标签: coffeescript


【解决方案1】:

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

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

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

【讨论】:

  • 我用这个错误创造了一些令人愉快的比赛条件,很累
  • 刚刚也被这个了。我觉得do (num) -> 应该是默认行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多