45

如果我有这样的事情:

var blah = function() { };

然后稍后在代码 blah 中被使用,JSLint 提示说删除空块是什么?

4

7 回答 7

38

我不知道怎么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; }

经验表明,这种形式更有弹性。

因此,它可能只是检查空块{ }并使空白函数无效。

于 2013-07-16T20:00:50.757 回答
18

使用 lambda 表达式:

const blah = () => void 0;

这将清楚地表明这blah是一个返回的空函数undefined

于 2018-02-07T08:27:55.107 回答
5

如果你问什么 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');
    }
    ...
}
于 2015-02-26T21:28:57.090 回答
4

很多代码检查器都会检查这类事情。这并不意味着你永远不应该有空的代码块。有时拥有它们是有正当理由的。但这通常意味着程序员只是忘记了编写实现。:)

我喜欢做的是在函数体中添加注释,解释为什么它是空的。这应该抑制警告,但它可能不取决于代码检查器是否认为带有注释“空”的代码块。

var blah = function() { /* empty because ... */ };
于 2013-07-16T19:59:21.897 回答
3

如果您打算将该函数用作带有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; 
};
于 2014-05-14T02:03:13.453 回答
2

这个

{
    ...
}

被认为是一个代码块,提示让您知道它是空的(其中没有命令)。不过,正如@Katana314 所说,您不必删除它,这可能是故意的。

于 2013-07-16T19:58:58.217 回答
0

让我想到这个问题的是我的命名空间中有一个空函数

当我调用那个函数时,

TypeError: MyNamespcae.myFunction is not a function

所以不要创建一个空函数,至少添加一个语句,如 void(0); 或返回空值;

于 2018-05-22T13:07:26.343 回答