Javascript 从控制台调用coffeescript函数

Javascript 从控制台调用coffeescript函数,javascript,coffeescript,ruby-on-rails-3.1,Javascript,Coffeescript,Ruby On Rails 3.1,使用coffeescript和Rails 3.1.0.rc4玩一点。有以下代码: yourMom = (location) -> console.log location yourMom "wuz hur" 当页面加载时,会正确输出“wuz-hur”。但是当我试着打电话的时候 yourMom("wuz hur") 从ChromeJS控制台(就像我有时测试普通js函数一样),我得到一个“ReferenceError:yourMom未定义” coffeescript生成的函数是否以这

使用coffeescript和Rails 3.1.0.rc4玩一点。有以下代码:

yourMom = (location) ->
  console.log location

yourMom "wuz hur"
当页面加载时,会正确输出“wuz-hur”。但是当我试着打电话的时候

yourMom("wuz hur")
从ChromeJS控制台(就像我有时测试普通js函数一样),我得到一个“ReferenceError:yourMom未定义”


coffeescript生成的函数是否以这种方式可用

发生这种情况是因为coffeescript将所有内容都封装在一个闭包中。该代码的JavaScript输出实际上是:

(function() {
  var yourMom;
  yourMom = function(location) {
    return console.log(location);
  };
  yourMom("wuz hur");
}).call(this);
如果要将其导出到全局范围,可以执行以下操作之一:

window.yourMom = yourMom = (location) ->
  console.log location


我不确定Rails,但是CoffeeScript编译器有一个选项(--bare)可以在没有函数包装器的情况下编译。玩起来很好,但它确实污染了全局范围。

共享全局方法/变量的更简单方法是使用@,这意味着

@yourMom = (location) ->
  console.log location

yourMom "wuz hur"

更好的语法,更容易阅读,但我不鼓励您创建全局方法/变量

此链接可能会解决您的问题
将您的函数包装在一个唯一的名称空间中,然后您可以从wnywhere访问这些函数。

必须抵制让妈妈开玩笑的冲动……唉。副本。另请参见。对不起,崔佛,错过了这些。在意识到你的问题是重复之后,什么是最佳实践,我应该删除它吗?@TrevorBurnham“叹气”:这有点令人讨厌。请不要让陌生人讨厌。这是从RT+FM的态度,从C++邮件列表天。@ LeeQuarella我只是把“XYZ复制(链接)”在顶部的职位。这些天,被复制者会被标记为这样(有一个指向被复制者的链接)并很快关闭。所以,我不能从控制台给你妈妈打电话吗?有没有办法使该功能在那里可用?控制台调试对我很有帮助,在没有这个功能的情况下使用coffeescript有点犹豫。。。(这篇文章是在答案编辑之前发表的)你可以看到我说的两个选项。你只需要确保你将它导出到全球范围。啊,这有点烦人。我猜控制台调试并没有被很多人使用?是的,但您应该特别避免在JavaScript中发布许多全局变量。当您要调试它们时,将它们放入全局范围,然后在处理完它们后将其从全局范围中删除。谢谢您的帮助。:)虽然这可能是一个老问题,但我可以问一下为什么不鼓励创建全局方法/变量吗?如果你不鼓励这样做,那么人们应该从他们的网页上调用这些函数吗?
@yourMom = (location) ->
  console.log location

yourMom "wuz hur"