更新:我的问题是由返回的两个函数引起的,而不仅仅是一个。$.each
循环中的回调函数在if/else
块中生成返回。尽管我稍后在问题中链接它,但有一个很好的问题是关于如何在 CoffeeScript 编译为 JavaScript 时覆盖返回。这不是该问题的重复;我有一个更具体的问题。
我正在尝试通过将我在 JavaScript 中所做的一些工作与jQuery Widget Factory一起移植来学习 CoffeeScript 以获得乐趣。假设$foos
是一个布尔数组。我有一个类似于此的 CoffeeScript 函数:
$ = jQuery
activateCats = ($foos) ->
$.each $foos, (idx, foo) ->
$bar = $(".cats").eq(idx)
if foo
$bar.addClass("ui-state-active")
.removeClass "ui-state-disabled"
else
$bar.removeClass("ui-state-active")
.addClass "ui-state-disabled"
# add another empty return here
return
编译后的 JavaScript 如下所示:
var $, doThings;
$ = jQuery;
activateCats = function($foos) { // Function 1
$.each($foos, function(idx, foo) { // Function 2
var $bar;
$bar = $(".cats").eq(idx);
if (foo) {
return $bar.addClass("ui-state-active").removeClass("ui-state-disabled");
} else {
return $bar.removeClass("ui-state-active").addClass("ui-state-disabled");
}
});
};
如果我不包括底部的返回,它会编译成这个(注意我的$.each
循环前面的返回):
var $, doThings;
$ = jQuery;
activateCats = function($foos) {
return $.each($foos, function(idx, foo) {
var $bar;
$bar = $(".cats").eq(idx);
if (foo) {
return $bar.addClass("ui-state-active").removeClass("ui-state-disabled");
} else {
return $bar.removeClass("ui-state-active").addClass("ui-state-disabled");
}
});
};
我很确定我不希望这些回报出现在我的$.each
循环中。我不确定 CoffeeScript 为什么要添加它们,因为我的return
函数底部是空的。我之前在其他地方遇到过这个问题,但我阅读了这个帖子并解决了这些问题。我已经尝试了该线程中的各种方法,但它们似乎都不适用于这种边缘情况。
如何防止 CoffeeScript 添加这些返回值?