如何在coffeescript中編寫此代碼?Coffeescript ---如何創建一個自我啓動的匿名函數?
f = (function(){
// something
})();
感謝您的任何提示:)
如何在coffeescript中編寫此代碼?Coffeescript ---如何創建一個自我啓動的匿名函數?
f = (function(){
// something
})();
感謝您的任何提示:)
道歉,我解決了這個問題:
f = (
() -> "something"
)()
雖然你可以使用括號(如(-> foo)()
,您可以通過使用關鍵字do
避免它們:
do f = -> console.log 'this runs right away'
最常見的使用do
正在捕獲循環中的變量。例如,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
沒有do
,你只可以在循環後打印的x
值的3倍。
+1哇,我不知道可以這樣用。真棒! – 2011-04-11 05:25:02
你也可以寫'f = do - > console.log x' – scribu 2011-08-07 16:26:49
@scribu那麼,這兩個語句是非常不同的,而你的實際上是我應該給出的。我分配功能' - >控制檯。記錄'這個馬上跑'到'f',然後運行它;你的運行函數然後把它的結果賦給'f',就像原來的問題一樣。 (儘管在'console.log'的情況下,反正總是返回undefined。) – 2011-08-07 19:23:23
如果你想「別名」參數傳遞給CoffeeScript的自我調用函數,讓我們說這是你想達到什麼目的:
(function (global, doc) {
// your code in local scope goes here
})(window, document);
然後do (window, document) ->
不會讓你這樣做。要走的路是用括號則:
((global, doc) ->
# your code here
)(window, document)
'do(global = window,doc = document) - >' – 2015-08-20 19:21:16
嘗試使用
do ($ = jQuery) ->
您還可以使用默認參數,結合do
關鍵字種子遞歸「自啓動功能」的初始值。例如:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
這很可笑容易在咖啡:
do ->
將返回
(function() {})();
do ->
#your stuff here
這將創建一個自閉執行,這是非常有用的作用域。
這似乎並沒有增加大量的新信息,相比之下其他答案已經發布。與其創建一個相互競爭的答案,您可以通過在另一個答案中發佈內容豐富的評論來增加更多價值,該答案爲其他答案增加了一些清晰或有用的信息。 – 2015-02-05 22:37:38
應該
f =() ->
# do something
http://jashkenas.github.com/coffee-script/那裏面有一個閉合例子。 – kjy112 2011-04-09 13:33:12
這不是咖啡劇本的方式。即使它有效。 – 2011-04-10 18:27:47
@Squeegy我不一定會這麼說。 'do'關鍵字有一些限制,有時需要使用JS風格的方法(參見[issue 960](https://github.com/jashkenas/coffee-script/issues/960)); 'do'只是因爲封閉循環用例而被添加的。 – 2011-08-08 13:42:20