正确使用RequireJS,Coffeescript和Revealing Module Pattern

时间:2012-09-04 14:49:01

标签: javascript coffeescript requirejs amd revealing-module-pattern

我在下面定义了以下Coffeescript代码,它使用RequireJS定义了一个函数:

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代码生成的自执行函数。这会导致我可能无法追踪的问题吗?或者这是正确的。

谢谢。

1 个答案:

答案 0 :(得分:2)

这是正确的

没有包装功能和拥有功能之间的区别在于范围。

如果你定义var a = 10;在全局范围内,无论是否有var关键字,a都会变为全球。

当包装时,所有变量都是包装函数的本地变量,因此不要以全局结束。

在你的例子中,所有东西都已包含在一个函数中,所以是的,你不需要额外的包装!

您可以告诉coffee-script不要使用

添加包装函数
coffee -b, --bare         compile without a top-level function wrapper

恕我直言:最好总是拥有包装函数,这样你就不需要在文件到文件的基础上考虑它了。