web-dev-qa-db-ja.com

JavaScriptの空の関数

このようなものがある場合:

var blah = function() { };

そして、後でコードのブラーが使用されていますが、空のブロックを削除するというJSLintヒントは何ですか?

28
user1899082

jsLintが何を考えているのかわかりませんが、これが問題であり、解決策が必要な場合は、次のようなことができます。

var blah = function() { return undefined; }; // or just return;

更新:Bergiの推測は正しいと思います。なぜなら、 jslint サイトのRequired Blocks セクション :

JSLintは、if、while、doおよびforステートメントがブロック{ブレースで囲まれたステートメント}で作成されることを想定しています。JavaScriptでは、ifを次のように記述できます。if(条件)ステートメント;多くのプログラマが同じコードで作業しているプロジェクトの間違い。それが、JSLintがブロックの使用を期待する理由です。

if (condition) { statements; }

経験によれば、このフォームはより回復力があります。

したがって、おそらく空のブロックを確認するだけです{ }および空白関数を無効にします。

28
The Alpha

どのJsLintオプションがこの警告をオフにするかを尋ねている場合は、「debug:true」です。

奇妙なことに、ドキュメントはこの動作を参照していません。

「デバッガーステートメントの許可」| debug| trueifdebuggerステートメントを許可する必要があります。実動に入る前に、このオプションを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');
    }
    ...
}
5
Mat

多くのコードチェッカーがこの種のことをチェックします。 neverに空のコードブロックを含める必要があるという意味ではありません。時々それらを持っている正当な理由があります。しかし、それは多くの場合は、プログラマが実装を書くのを忘れたことを意味します。 :)

私がやりたいのは、関数本体にコメントを入れて、それが空である理由を説明することです。これは警告を抑制するはずですが、コードチェッカーがコメント「空」のコードブロックを考慮するかどうかに依存しない場合があります。

var blah = function() { /* empty because ... */ };
4
Michael

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; 
};
3
Aaren Cordova

ラムダ式を使用します。

const blah = () => void 0;

これにより、blahundefinedを返す空の関数であることが明確になります。

3
splintor

この

{
    ...
}

はコードブロックと見なされ、ヒントは空であることを知らせます(コマンドはありません)。ただし、@ Katana314が言ったように、意図的に削除することはできません。

1
jacobianism

この質問をさせてくれたのは、名前空間に空の関数があったことです

そして、その関数を呼び出したとき、そして

TypeError: MyNamespcae.myFunction is not a function

したがって、空の関数を作成しないでください。少なくとも、void(0)のようなステートメントを1つ追加してください。またはnullを返します。

0