1

我在 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 答案的扩展,我找到了如何在 Rails 3.1 中为 CoffeeScript 使用选项“--bare”的答案

4

2 回答 2

2

它只是将所有内容包装在一个函数中,以“保护”它免受全局范围的影响。您可以手动使用 coffeescript 编译器。正常编译,你会得到底部的输出,添加-bare标志,你会得到顶部的。请参阅摆脱 CoffeeScript 的闭包包装器

于 2013-09-01T20:43:42.487 回答
1

就像@edofic 指出的那样,Coffeescript 只是将您的代码包装在一个函数中以将其与外界隔离。

为了解决这个问题,当我声明它们时,我只需在所有全局变量前面加上 window(例如:window.someVar)。这使得它们可以在代码之外访问,也使 Coffeescript 更便携,以便您可以在未设置为使用 --bare 选项的其他机器上编译它。

于 2013-09-04T15:33:25.593 回答