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

时间:2015-03-16 16:14:22

标签: jquery anonymous-function jslint 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;
            }
        }
    }
});

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

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

1 个答案:

答案 0 :(得分:5)

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

如果要安抚JSLint,可以在函数的底部放置一个return undefined;,以便它始终显式返回。

现在,我认为:

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

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