为什么 JSLint 对事件处理程序说 "anonymous function does not always return a value"?

Why does JSLint say "anonymous function does not always return a value" for an event handler?

当我JSLint这段代码时:

$(document).keydown(function(e){ 
    if ($("#chaptersFunctionality").length !== 0) {
        if (e.keyCode == '13')
            return false;
        if ($("#kelvin").val() === "" && $("#caleb").attr("title") === "Show all steps") {
            switch(e.which){
            case 39:    if ((parseInt(currentAnchor)+1) < parseInt(maxi))
                expandMe(++currentAnchor);
                break;
            case 37:    if (currentAnchor > 0)
                expandMe(currentAnchor-1);
                break;
            }
        }
    }
});

...我收到了很多警告,其中大部分我都明白了,但是这个让我难住了: “匿名函数并不总是return一个值

为什么这么说?事件处理程序不是匿名函数,对吗? 而且它没有 return 任何价值,是吗? 那么这意味着什么,[moll,pac] 会怎样使 linter 变得更好?

JSLint 会在任何时候警告您某个函数有一些遇到 return 的分支和其他没有遇到 return 就终止的分支。 JSLint 认为函数应该 always 显式 return 一个值或 never 显式 return 一个值。 有时 明确 return 一个值的函数会为自己赢得警告。您的代码在一种情况下执行 return false,否则从不使用 return.

如果你想安抚 JSLint,你可以在你的函数底部放置一个 return undefined;,这样它总是明确地 returns 东西。

现在,我的意见是:

当涉及到事件侦听器时,return 值仅在某些时候是 100% 可接受的。使用事件侦听器 return 值的浏览器内部引擎已被编程为接受 return 值或缺少 return 值。

因为不 return 在事件侦听器中输入值的做法是完全正常的,这不会损害代码的可读性。我认为在这种情况下您可以安全地忽略 JSLint。