来自精美手册:
词法作用域和变量安全
[...]
虽然为了清楚起见在本文档中被禁止,但所有 CoffeeScript 输出都包装在一个匿名函数中: (function(){ ... })();
这个安全包装器与var
关键字的自动生成相结合,使得污染全局命名空间变得极其困难意外地。
如果您想创建顶级变量供其他脚本使用,请将它们作为属性附加到window或CommonJS 中的导出对象上。存在运算符(如下所述)为您提供了一种可靠的方法来确定在何处添加它们;如果您同时针对 CommonJS 和浏览器:exports ? this
因此,存在自调用函数包装器以防止您污染全局命名空间。如果你想把一些东西放到全局命名空间中,那么你必须明确地把它放在那里;在浏览器中,您可以使用:
window.someFunc = -> alert('hello')
或者
@someFunc = -> alert('hello')
该@someFunc
表单假定您位于范围的顶部(即不在另一个函数或类中)。
或者,您可以找到一种方法来编译您的 CoffeeScript --bare
:
-b, --bare
在没有顶级函数安全包装器
的情况下编译 JavaScript 。