全局命名空间和这个在coffeescript循环

global namespace and this in coffeescript loops

本文关键字:coffeescript 循环 命名空间 全局      更新时间:2023-09-26

在此代码:

class MyClass
  myfun: (arg) ->
    for x in arg
      do ->
        ...

循环外部的作用域是MyClass,而在循环内部(它是一个匿名函数)作用域更改为DOMWindow。

为什么会发生这种情况?我该如何预防呢?我的主要问题是,如果MyClass类的作用域发生了变化,我就不能访问MyClass类中的其他函数。

谢谢

使用粗箭头语法将a函数绑定到当前上下文:

class MyClass
  myfun: (arg) ->
    for x in arg
      do =>
        ...

发生这种情况是因为do关键字只调用函数而没有任何上下文,所以它默认为window对象。

do -> ...

等价于

(function() {
    ...
}());