0

我尝试在我的 Grails 项目中使用咖啡脚本。为了实现这一点,我决定使用 coffeescript-resources 插件。但是结果视图中的编译咖啡如下所示:

(function() {
    var someFunc;
    someFunc = function() {
       return alert("hello");
    };
}).call(this); 

在这种情况下,我不能称之为。我没有在插件文档中找到任何适当的配置来避免在编译咖啡文件时使用匿名函数。我该如何解决这个问题?

4

1 回答 1

1

来自精美手册

词法作用域和变量安全
[...]
虽然为了清楚起见在本文档中被禁止,但所有 CoffeeScript 输出都包装在一个匿名函数中: (function(){ ... })();这个安全包装器与var关键字的自动生成相结合,使得污染全局命名空间变得极其困难意外地。

如果您想创建顶级变量供其他脚本使用,请将它们作为属性附加到window或CommonJS 中的导出对象上。存在运算符(如下所述)为您提供了一种可靠的方法来确定在何处添加它们;如果您同时针对 CommonJS 和浏览器:exports ? this

因此,存在自调用函数包装器以防止您污染全局命名空间。如果你想把一些东西放到全局命名空间中,那么你必须明确地把它放在那里;在浏览器中,您可以使用:

window.someFunc = -> alert('hello')

或者

@someFunc = -> alert('hello')

@someFunc表单假定您位于范围的顶部(即不在另一个函数或类中)。

或者,您可以找到一种方法来编译您的 CoffeeScript --bare

-b, --bare
在没有顶级函数安全包装器 的情况下编译 JavaScript 。

于 2013-10-12T18:04:41.317 回答