我尝试在Grails项目中使用coffeescript。为了实现这个目标,我决定使用coffeescript-resources插件。但是在结果视图中编译的咖啡看起来如下:
(function() {
var someFunc;
someFunc = function() {
return alert("hello");
};
}).call(this);
在这种情况下,我不能称之为。我没有在插件文档中找到任何正确的配置,以避免在编译coffee-file时使用匿名函数。我该如何解决这个问题?
答案 0 :(得分:0)
来自fine manual:
词汇范围和可变安全性
[...]
虽然为了清楚起见在本文档中进行了抑制,但所有CoffeeScript输出都包含在一个匿名函数中:(function(){ ... })();
此安全包装器与自动生成var
关键字相结合,使得污染全局命名空间变得非常困难不小心。如果您要为其他要使用的脚本创建顶级变量,请将它们作为属性添加到窗口或CommonJS中的 exports 对象上。 存在运算符(如下所述)为您提供了一种可靠的方法来确定添加它们的位置;如果您同时定位CommonJS和浏览器:
exports ? this
因此,存在自调用函数包装器以防止您污染全局命名空间。如果你想把东西放到全局命名空间中,那么你必须明确地把它放在那里;在浏览器中,您可以使用以下方式执行此操作:
window.someFunc = -> alert('hello')
或
@someFunc = -> alert('hello')
@someFunc
表单假定您位于范围的顶部(即不在另一个函数或类中)。
或者,您可以找到一种使用--bare
编译CoffeeScript的方法:
-b, --bare
在没有顶级功能安全包装器的情况下编译JavaScript。