为什么JSLint说"匿名函数并不总是为事件处理程序返回值"?

B. *_*non 0 jquery jslint anonymous-function eventhandler

当我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;
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

...我得到了很多警告,其中大部分都是我嘲笑的,但这个让我难过:" 匿名函数并不总是返回值 "

为什么这么说呢?事件处理程序不是匿名函数,是吗?并且它无论如何都没有返回任何价值,是吗?那么这意味着什么,以及[moll,pac]如果是什么呢?

aps*_*ers 5

每当一个函数有一些分支遇到一个return和其他分支终止而没有遇到一个时,JSLint会发出警告return.JSLint认为函数应始终显式返回值或永远不显式返回值.有时显式返回值的函数自行获得警告.您的代码return false在一种情况下执行,否则永远不会使用return.

如果你想安抚JSLint,你可以return undefined;在函数的底部放置一个,以便它总是显式返回一些东西.

现在,我认为:

说到事件监听器,有时只返回值是100%可接受的.使用您的事件侦听器return值的浏览器内部引擎已经编程为接受返回值或缺少返回值.

因为在事件监听器中不返回值的做法是完全正常的,所以这不会损害代码的可读性.我认为在这种情况下你可以安全地忽略JSLint.

  • 轻微的挑剔:该功能不"有时返回一个值",它不能"缺少一个返回值".无论你是否自己做,函数*都会在这些情况下返回`undefined`.我建议不要忽略错误并按照最初建议的方式安抚JSLint.正如[Crockford所说,JSLint会伤害你的感情](http://www.jslint.com/lint.html),但这就是重点.如果您需要一致的代码,特别是在分布式组中工作时,linters将免除感觉并将所有代码保留在linter的范围内.这是他们的*raison d'etre*.; ^) (3认同)