1

以下に、RequireJSを使用して関数を定義するCoffeescriptコードを定義しました。

define 'PersonService', ['jquery'] ($) -> 
    getPerson = (id) -> 
        person = dataService.GetPerson id
    { getPerson: getPerson}

それは以下を生成します:

(function() {

  define('PersonService', ['jquery'](function($) {
    var getPerson;
    getPerson = function(id) {
      var person;
      return person = dataService.GetPerson(id);
    };
    return {
      getPerson: getPerson
    };
  }));

}).call(this);

私が抱えている問題は、Coffeescriptコードから生成される自己実行関数にあると思います。これにより、追跡できない可能性のある問題が発生しますか?またはこれは適切ですか。

ありがとうございました。

4

1 に答える 1

2

あたりです

ラップされた関数がない場合とある場合の違いは、スコープに関係しています。

var a = 10; を定義すると、グローバル スコープでは、 a はvarキーワードの有無にかかわらずグローバルになります。

ラップされた場合、すべての変数はラップされた関数に対してローカルであるため、グローバルにはなりません。

あなたの例では、すべてがすでに関数にラップされているので、余分なラッピングは必要ありません!

を使用して、ラッパー関数を追加しないようにcoffee-scriptに指示できます

coffee -b, --bare         compile without a top-level function wrapper

IMHO: ファイルごとに考える必要がないように、常にラッパー関数を使用することをお勧めします。

于 2012-09-04T14:52:37.097 に答える