2014-02-10 43 views
1

我有CoffeeScript的,看起來像下面這樣:CoffeeScript的函數編譯問題

myfunctionname = (foo, bar, baz) -> 
    alert("I am here") 
    return 

這應該是宣佈在咖啡腳本函數的方式。 (根據js2coffee.org等)

這被轉換成如下:

(function() { 
    var myfunctionname; 

    myfunctionname = function(foo, bar, baz) { 
    alert("I am here"); 
    }; 
}).call(this); 

這樣做的問題是,當我嘗試加入這個JS文件爲查看和訪問我的myfunctionname方法,它不存在。這可能超出了範圍。

因此,CoffeeScript不會爲我轉換成可用的格式。我需要以下輸出格式:

function myfunctionname (foo, bar, baz) { 
    alert("I am here"); 
}; 

此格式允許我在需要它們的地方包含函數。

有沒有在CoffeeScript中實現這一點的方法?或者我應該考慮完全放棄CoffeeScript?

+0

試圖尋找這個,但沒有找到任何東西。奇怪。 – Automatico

回答

1

咖啡腳本通過匿名函數調用環繞所有語句,這是避免污染全局名稱空間的良好實踐。

如果你想避免這種情況,您可以手動將功能附加到窗口命名空間(這是在DOM全局​​命名空間):

myfunctionname = (foo, bar, baz) -> 
    alert("I am here") 
    return 

window.myfunctionname = myfunctionname 

如果您打算將它與幾個功能,我建議你在窗口中添加一個單獨的對象,然後將所有特定的導出函數添加到。

window.MyApp = {} 
window.MyApp.myfunctionname = ... 
+0

太棒了。謝謝!我同意它會混淆全局命名空間,但非常高興能夠有選擇地這樣做。 – Automatico