1

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

谢谢你。

4

1 回答 1

2

这是正确的

没有包装函数和有一个包装函数之间的区别在于范围。

如果你定义 var a = 10; 在全局范围内,无论有没有var关键字,a 都变成全局的。

包装后,所有变量都是包装函数的本地变量,因此不要最终成为全局变量。

在您的示例中,所有内容都已包装在一个函数中,所以是的,您不需要额外的包装!

您可以告诉咖啡脚本不要使用添加包装函数

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

恕我直言:最好始终拥有包装器功能,这样您就不需要在文件到文件的基础上考虑它。

于 2012-09-04T14:52:37.097 回答