为什么 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。
当我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。