2011-08-24 11 views
21
私はCoffeeScriptのこの人気のjQueryのラムダ閉鎖を再作成しようとしています

CoffeeScriptでこのラムダクロージャを書くには?

(($, window, undefined) -> 
    $ -> 
    alert "js!" 
)(jQuery, window) 

私はこのエラーを取得しています:

(function($, window, undefined){ 
    $(document).ready(function(){ 
    ... 
    }); 
})(jQuery, window); 

これまでのところ、私はこれ持って

Error: Parse error on line 1: Unexpected 'BOOL'

をに見えますundefinedのようなものがここの問題の原因です。これを回避する方法に関するアイデア?

答えて

53

undefinedにコンパイルのCoffeeScriptのキーワードです。あなたはそれが適切に定義されていることを確認する必要はないので、その部分を忘れることができます。

CoffeeScriptには、直ちに呼び出される関数式構文を使用する代わりにクロージャを作成するために使用できるdoキーワードがあります。

CoffeeScriptのソース try it
do ($ = jQuery, window) -> 
    $ -> 
    alert "js!" 
上記の構文は、CoffeeScriptの1.3.1までサポートされていなかったのJavaScript
(function($, window) { 
    return $(function() { 
    return console.log("js!"); 
    }); 
})(jQuery, window); 

コンパイル。あなたはまだこれを実行する必要が古いバージョンの場合:

CoffeeScriptのソース [try it]
(($, window) -> 
    $ -> 
    alert "js!" 
)(jQuery, window) 

あなたは好奇心旺盛であれば、ここでのCoffeeScriptはundefinedを処理する方法です。 JavaScriptの

console.log(void 0); 

をコンパイル

CoffeeScriptのソース [try it]
console.log undefined 
あなたはそれが undefined変数を使用していないことがわかり、その代わりに、未定義の値を生成するために JavaScript's void operatorを使用することができます。

13
do ($, window) -> 
    $ -> 
    alert "js!" 

(function($, window) { 
    return $(function() { 
    return alert("js!"); 
    }); 
})($, window); 
+0

私はfuncシグネチャに 'undefined' argを取得しようとしています。私はこれが重要ではないことを知っていますが、なぜ私はそれを私にさせてもらえませんか? – naomik

+1

もう一つの答えでは、coffeescriptは単語 'undefined'を' void 0'にコンパイルし、その変数に依存しないからです。 – austinbv

+0

@naomiキーワードです。関数のシグネチャに 'undefined'を付ける目的は何ですか? CoffeeScriptはそれを必要としないはずです。 –

関連する問題