2011-06-01 129 views
48

我正在尝试将Javascript中的function转换为CoffeeScript。这是代码:CoffeeScript中的函数

function convert(num1, num2, num3) { 
    return num1 + num2 * num3; 
} 

但我怎么能在CoffeeScript中做到这一点?


我试图运行从HTML源这样的功能:

<script type="text/javascript" src="../coffee/convert.js"></script> 

<script type="text/javascript"> 
    convert(6, 3, 10); 
</script> 

但它不会工作,我得到一个错误说:ReferenceError: Can't find variable: convert

如何纠正这个?

+2

给出的答案是正确的,但你真正应该做的是从你的HTML中获取剩余的JS,并将其存入外部的JS或CoffeeScript文件中。 JS不属于HTML。 – 2011-11-10 22:27:08

回答

76

尝试代码,您需要导出转换功能到全球范围。
How can Coffescript access functions from other assets?

window.convert = (num1, num2, num3) -> 
    num1 + num2 * num3 
+5

这个答案是点亮的。必须强调的是,一旦连接到'window','window.convert'可以从任何地方访问,就像'convert';但是写'convert ='会创建一个名为'convert'的变量,并带有局部'var'作用域。 – 2011-06-01 21:13:32

+0

漂亮的lawnsea,今天刚刚从javascript(混合)调用函数时触及了这一个。我记得匿名的范围,但忘记了特雷弗的建议,把它拍在窗户上,使它可以在咖啡标记的空间外调用 – 2011-06-11 21:47:34

0
convert = (num1, num2, num3) -> num1 + num2 * num3 
4
window.convert = (num1, num2, num3) -> 
    num1 + num2 * num3 
32

@lawnsea答案是伟大的。

我只是想补充一些想法。

而不是污染全局名称空间,我宁愿只添加一个变量到window对象。

window.App = {} 

然后,您可以访问全球范围内的App并在其中添加所有内容。功能convert现在可以这种方式表达:

App.convert = convert = (a, b, c) -> a + b * c 

然后,调用函数的局部范围

convert 1,2,3 

现在内全球

App.convert 1,2,3 
+4

我完全同意。 – lawnsea 2011-06-10 01:52:04

16

在顶层您coffeescript文件,这个(又名@)应该参考窗口。所以要附加到这里,您可以使用简写:

@convert = (num1, num2, num3) -> num1 + num2 * num3 

请注意,这会污染全局命名空间。 jm-发布的解决方案更为审慎。但可以更换

window.App = {} 

@App = {} 

使用@的好处是,它是指全球在node.js中,这样你就可以使用相同的代码暴露你的功能在浏览器和服务器端环境中。