CoffeeScript编译方式不同

时间:2013-09-01 20:35:00

标签: javascript ruby-on-rails coffeescript

我正在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

的答案

2 个答案:

答案 0 :(得分:2)

它只是将所有内容包装在一个函数中,以“屏蔽”它与全局范围。您可以手动使用coffeescript编译器。正常编译并获得最低输出,添加-bare标记,您将获得最高标记。见Getting rid of CoffeeScript's closure wrapper

答案 1 :(得分:1)

就像@edofic所说的那样,Coffeescript只是将你的代码包装在一个函数中,以保护它免受外界的攻击。<​​/ p>

为了解决这个问题,当我声明它时,我只是在我的所有全局变量前面加上窗口(例如:window.someVar)。这使得它们可以在代码之外访问,并且还使Coffeescript更具可移植性,以便您可以在未设置为使用--bare选项的其他计算机上进行编译。