从控制台调用coffeescript函数

时间:2011-07-20 01:32:44

标签: 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")
来自chrome js控制台的

(我有时会测试正常的JS函数),我得到一个“ReferenceError:yourMom未定义”

coffeescript生成的函数是否以这种方式提供?

4 个答案:

答案 0 :(得分:37)

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

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

yourMom "wuz hur"

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

答案 1 :(得分:13)

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

(function() {
  var yourMom;
  yourMom = function(location) {
    return console.log(location);
  };
  yourMom("wuz hur");
}).call(this);

如果要将其导出到全局范围,可以执行以下操作:

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

此链接可能会解决您的问题 Rails - Calling CoffeeScript from JavaScript 将您的函数包装在一个唯一的命名空间中,然后您可以从wnywhere

访问这些函数