使用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生成的函数是否以这种方式提供?
答案 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
访问这些函数