全局命名空间,这在coffeescript循环中

luc*_*uca 2 javascript coffeescript

在这段代码中:

class MyClass
  myfun: (arg) ->
    for x in arg
      do ->
        ...
Run Code Online (Sandbox Code Playgroud)

循环外部的范围是MyClass,而在循环内部(它是一个匿名函数),范围变为DOMWindow.

为什么会这样?我该怎样预防呢?我的主要问题是,如果范围发生变化,我无法访问MyClass类中的其他函数.

谢谢

Arn*_*anc 5

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

class MyClass
  myfun: (arg) ->
    for x in arg
      do =>
        ...
Run Code Online (Sandbox Code Playgroud)

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

do -> ...
Run Code Online (Sandbox Code Playgroud)

相当于

(function() {
    ...
}());
Run Code Online (Sandbox Code Playgroud)