如果我有这样的事情:
var blah = function() { };
然后稍后在代码 blah 中被使用,JSLint 提示说删除空块是什么?
我不知道怎么jsLint
想,但如果这是一个问题并且您需要解决方案,那么您可以执行以下操作:
var blah = function() { return undefined; }; // or just return;
更新:我认为,Bergi
的猜测是正确的,因为在该部分的jslint网站上Required Blocks
:
JSLint 期望 if、while、do 和 for 语句将由块组成{即用大括号括起来的语句}。JavaScript 允许将 if 写成这样:if (condition) 语句;众所周知,这种形式有助于许多程序员正在处理相同代码的项目中的错误。这就是 JSLint 期望使用块的原因:
if (condition) { statements; }
经验表明,这种形式更有弹性。
因此,它可能只是检查空块{ }
并使空白函数无效。
使用 lambda 表达式:
const blah = () => void 0;
这将清楚地表明这blah
是一个返回的空函数undefined
。
如果你问什么 JsLint 选项关闭了这个警告,它是:“debug:true”
奇怪的是,文档没有提到这种行为:
“容忍调试器语句” | 调试| 如果应允许调试器语句,则为true 。在投入生产之前将此选项设置为false 。
但是,如果您查看代码,您会发现它不会在将调试选项设置为 true 时发出警告:
function block(kind) {
// A block is a sequence of statements wrapped in braces.
...
if (kind !== 'catch' && array.length === 0 && !option.debug) {
curly.warn('empty_block');
}
...
}
很多代码检查器都会检查这类事情。这并不意味着你永远不应该有空的代码块。有时拥有它们是有正当理由的。但这通常意味着程序员只是忘记了编写实现。:)
我喜欢做的是在函数体中添加注释,解释为什么它是空的。这应该抑制警告,但它可能不取决于代码检查器是否认为带有注释“空”的代码块。
var blah = function() { /* empty because ... */ };
如果您打算将该函数用作带有new
运算符的构造函数:
// Returns the instance that was just created with the new operator.
var ClassLikeFunction = function(){
return this;
};
另一方面, if 故意是一个没有返回值的空白函数:
// Returns the same value as a function that returned nothing.
var blankFunction = function(){
return undefined;
};
这个
{
...
}
被认为是一个代码块,提示让您知道它是空的(其中没有命令)。不过,正如@Katana314 所说,您不必删除它,这可能是故意的。
让我想到这个问题的是我的命名空间中有一个空函数
当我调用那个函数时,
TypeError: MyNamespcae.myFunction is not a function
所以不要创建一个空函数,至少添加一个语句,如 void(0); 或返回空值;