我正在Ruby on Rails 3.2.13项目中编写CoffeeScript,但它似乎编译成一个不正确的JavaScript。我的代码是:
$('#a').change () ->
$('#b').hide()
coffeescript.org在线编译器将其编译为:
$('#a').change(function() {
return $('#b').hide();
});
出于某种原因,当我的项目在开发环境中运行时,将其编译为:
(function() {
$('#a').change(function() {
return $('#b').hide();
});
}).call(this);
这背后的原因是什么?它有任何暗示吗?
修改
在edovic's answer的扩展名中,我找到了how can I use option “--bare” in Rails 3.1 for CoffeeScript
的答案答案 0 :(得分:2)
它只是将所有内容包装在一个函数中,以“屏蔽”它与全局范围。您可以手动使用coffeescript编译器。正常编译并获得最低输出,添加-bare
标记,您将获得最高标记。见Getting rid of CoffeeScript's closure wrapper
答案 1 :(得分:1)
就像@edofic所说的那样,Coffeescript只是将你的代码包装在一个函数中,以保护它免受外界的攻击。</ p>
为了解决这个问题,当我声明它时,我只是在我的所有全局变量前面加上窗口(例如:window.someVar)。这使得它们可以在代码之外访问,并且还使Coffeescript更具可移植性,以便您可以在未设置为使用--bare选项的其他计算机上进行编译。