Javascript coffeescript本地编译器和coffeescript到js站点输出不同的结果

Javascript coffeescript本地编译器和coffeescript到js站点输出不同的结果,javascript,coffeescript,Javascript,Coffeescript,如果我在本地计算机上使用coffeescript编译器将此coffeescript编译为javascript: window.App = Models: {} Views: {} Collections: {} Routers: {} init: -> Backbone.history.start() 我将以生成的javascript输出结束: // Generated by CoffeeScript 1.3.3 (function() { wind

如果我在本地计算机上使用coffeescript编译器将此coffeescript编译为javascript:

window.App =
  Models: {}
  Views: {}
  Collections: {}
  Routers: {}
  init: ->
      Backbone.history.start()
我将以生成的javascript输出结束:

// Generated by CoffeeScript 1.3.3
(function() {

  window.App = {
    Models: {},
    Views: {},
    Collections: {},
    Routers: {}
  };

  ({
    init: function() {
      var spotsList;
      spotsList = new App.Views.SpotsList();
      return Backbone.history.start();
    }
  });

}).call(this);
但是,如果我在js站点的在线咖啡脚本中编译相同的代码,我将得到以下结果:

window.App = {
  Models: {},
  Views: {},
  Collections: {},
  Routers: {},
  init: function() {
    return Backbone.history.start();
  }
};
后者似乎更值得期待。我想这可能会给我的项目带来一些问题,但我不知道。我知道当我调用App.init()时,我的javascript控制台会说它不存在。谢谢你的帮助

修正


正如@Rob W在下面指出的,我的咖啡脚本代码中有一些标签。后来我发现这是因为我安装了一个干净的TextMate,没有将其设置为“软标签(空格)”。

您的“本地”和“在线”结果之间有两个区别

  • 本地版本包装在一个闭包中
  • 本地版本的
    init
    方法挂在
    App
    外部
  • 额外的闭包是
    coffee
    编译器的默认行为。使用
    --bare
    标志不清除包装器:

    coffee --bare --compile app.coffee
    

    没有理由发生2。确保空格匹配:如果在Models之前有四个空格,等等,在init之前有三个,那么输出将是“错误的”

    Coffeescript不是javascript。学习javascript。不确定是什么让你认为我认为coffeescript是javascript?+1谢谢Rob W。有些奇怪的事情正在发生,我正在努力弄清楚。我认为从js到coffee站点的结果(第二个js结果)是预期的,而不是我本地coffee调用生成的第一个结果。我会按照你的建议去做我尝试过的--bare,它确实去掉了闭包,但是,主要的区别仍然存在,似乎在调用App.init()@botbot时init函数不可用。你的问题中的输入/输出不匹配,这导致了你在复制源代码时犯了错误的建议。悬挂
    输入方法的最可能原因是错误的缩进(准确地说,至少有一个空格太少)。似乎无论我如何更改应用程序。咖啡、选项卡、空格、,我最终还是得到了一个窗口之外的init函数。应用程序名称空间我希望它位于…邮件对话摘要中:
    App.coffee
    包含混合空格和制表符,这导致了回答中解释的错误。不要把标签和空格混在一起!