2011-06-26 4 views
3
funName =() -> 
    $(".foo").addClass("bar"); 

匿名関数のスコープにコンパイルします。コンソールからfunNameを呼び出すと、結果はundefinedになります。トップレベル変数はグローバルスコープではなく、戻り値はCoffeeScriptでは必須です。

(function() { 
    var funName; 
    funName = function() { 
    return $(".foo").addClass("bar"); 
    }; 
}).call(this); 

このようなコンパイルの理由は何ですか?どのように私はそれを使用しますか?

また、CoffeeScriptを使用している関数内の必須戻り値についての洞察は素晴らしいでしょう。それはなぜそれのようなものですか?そのためにどうやってコードを変更する必要がありますか?

答えて

5

で説明したように、その後root.funName = ...を使用してグローバルfunName試みを作成したい場合。これらの関連の質問で示すように、CoffeeScriptの初心者のためのモジュラーラッパー混乱の共通点を、:あなたはドン場合」:あなたの他の質問については

関数が何かを返すようにするには、その関数の最後の行をそのままreturnにするか、等価的にはundefinedにします。いずれもreturnの関数にコンパイルされません。例えば:

funName = -> 
    $(".foo").addClass "bar" 
    return 

ノーリターン機能を定義するための可能な代替構文について継続的な議論(issue 899)があること

var funName; 
funName = function() { 
    $(".foo").addClass("bar"); 
}; 

ノートをコンパイル。現在の提案が受け入れられた場合、あなたはその構文のように、あなたはそれのためのご支援を表明する必要がある場合

funName = -/> $(".foo").addClass "bar" 

としてご関数を記述することができると思います。

0

これは古いスレッドかもしれませんが、同じ問題が発生しました。この問題を修正するために、コンパイラ環境に追加できる興味深いコマンドがあることに気付きました。

コマンド-b又は--bareはトップレベルの機能安全ラッパーなしのJavaScript をコンパイルするために使用されます。私は私のCoffeeScriptファイルをコンパイルしたとき、私はそのコマンドを追加した後、その奇妙なラッパー削除:私は私のIDE的環境としてWebStormを使用

(function() { 
    var funName; 
    funName = function() { 
     return $(".foo").addClass("bar"); 
    }; 
}).call(this); 

を、これは私が使用して私のコンパイラの文です:

--compile --bare $FileName$ 
関連する問題