我在下面定义了以下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代码生成的自执行函数。这会导致我可能无法追踪的问题吗?或者这是正确的。
谢谢。
答案 0 :(得分:2)
这是正确的
没有包装功能和拥有功能之间的区别在于范围。
如果你定义var a = 10;在全局范围内,无论是否有var
关键字,a都会变为全球。
当包装时,所有变量都是包装函数的本地变量,因此不要以全局结束。
在你的例子中,所有东西都已包含在一个函数中,所以是的,你不需要额外的包装!
您可以告诉coffee-script不要使用
添加包装函数coffee -b, --bare compile without a top-level function wrapper
恕我直言:最好总是拥有包装函数,这样你就不需要在文件到文件的基础上考虑它了。