2

私のCoffeeスクリプトを正確にコンパイルすることができません:

( function (root) { return 'Hello Coffee'; }(this) );

最初の試み:

do (root) ->
    'Hello Coffee'

...上記と同じコードを生成せず、出力します(with --bare):

(function(root) {
  return 'Hello Coffee';
})(root);
4

2 に答える 2

6

その JavaScript を正確に取得できると信じる理由はなく、おそらくその JavaScript を正確に取得する理由もありません。ただし、機能的に同等のものを取得できます。

((root) -> 'Hello Coffee')(@)

この JavaScript になります:

(function(root) { return 'Hello Coffee'; })(this);

これは JavaScript と同じことを行います。


doキーワードは、ループ内で使用するためのものです。

JavaScript ループを使用して関数を生成する場合、ループ変数が確実に閉じられるようにするためにクロージャー ラッパーを挿入するのが一般的であり、生成されたすべての関数が最終的な値を共有するだけではありません。CoffeeScript はdoキーワードを提供します。このキーワードは、渡された関数をすぐに呼び出し、引数を転送します。

通常do、次のような場合に使用します。

for x in a
    do (x) ->
        $("##{x}").click -> console.log x

ループ変数とクロージャーでのその使用との間の接続を切断したい場所。rootの JavaScript バージョンで 2 回表示されるのはそのためです。

do (root) ->
    'Hello Coffee'
于 2013-02-17T03:28:52.127 に答える
5

あなたはこのようにすることができます

do (root = @) ->
  'Hello Coffee'

このコードはにコンパイルされます

(function(root) {
  return 'Hello Coffee';
})(this);

CoffeeScript.org コンソールの例を参照してください。

于 2013-03-24T11:07:25.370 に答える