これをcoffeescriptで書く方法は?
f = (function(){
// something
})();
ヒントをありがとう:)
これをcoffeescriptで書く方法は?
f = (function(){
// 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回出力することになります。
-> console.log 'this runs right away'
をf
に割り当ててから実行します。yoursは関数を実行f
し、元の質問と同様に、その結果をに割り当てます。(ただし、の場合console.log
、戻り値は常にundefined
です。)
{f: do -> // something}
do
、関数に引数を渡すこともできます。合格する1
と、2
パラメータなどx
とy
、書き込みdo (x = 1, y = 2) ->
。(この機能のドキュメントは失われましたが、この機能が導入された問題にはいくつかの例があります。)
CoffeeScriptの自己呼び出し関数に渡された引数を「エイリアス」したい場合、これが達成しようとしていることだとしましょう。
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
その後do (window, document) ->
、あなたにそれをさせません。行く方法は、その後、parensを使用することです:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
do
キーワードをデフォルトの関数パラメーターと組み合わせて、再帰的な「自己開始関数」に初期値をシードすることもできます。例:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
使用してみてください
do ($ = jQuery) ->
do ->
#your stuff here
これにより、自己実行型のクロージャが作成され、スコープ設定に役立ちます。
申し訳ありませんが、私はそれを解決しました:
f = (
() -> "something"
)()
do
キーワードは、それが必要な時々 JSスタイルのアプローチを使用するように作るいくつかの制限があります(参照問題960)。do
クロージャ付きループのユースケースのために実際に追加されただけです。
そのはず
f = () ->
# do something
f = do -> console.log x