2011-06-01 107 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中,這樣你就可以使用相同的代碼暴露你的功能在瀏覽器和服務器端環境中。