2013-06-10 5 views
8

私は、ブラウザの違いを考慮に入れて関数のランタイム割り当てを使用しています。しかし、サポートされていないブラウザでは、JavaScriptエラーがスローされないように空の関数を返す必要があります。空の関数を正しく返すには?

しかし、jslintは空の関数について文句を言います。これを行ううれしいjslintは何ですか?

空のブロック。

$R.functionNull = function() { 
    // events not supported; 
}; 

$R.Constructor.prototype.createEvent = (function() { 
    if (doc.createEvent) { 
     return function (type) { 
      var event = doc.createEvent("HTMLEvents"); 
      event.initEvent(type, true, false); 
      $NS.eachKey(this, function (val) { 
       val.dispatchEvent(event); 
      }); 
     }; 
    } 
    if (doc.createEventObject) { 
     return function (type) { 
      var event = doc.createEventObject(); 
      event.eventType = type; 
      $NS.eachKey(this, function (val) { 
       val.fireEvent('on' + type, event); 
      }); 
     }; 
    } 
    return $R.functionNull; 
}()); 
+0

[JSHint](http://jshint.com/)が空のブロックを許容するためのオプションを持って、私はjslintは、そのオプションを持っているとは思いません。 – epascarello

+0

Jslintは明示的で読みやすいものが好きなので、あなたは未定義に戻ると思います。 –

答えて

9

あなたの機能に体を追加し、それがundefinedを返すことができます:

$R.functionNull = function() { 
    // Events not supported. 
    return undefined; 
}; 

これは、「真の空」機能と同じセマンティクスを保持し、JSLintを満足させなければなりません。

+0

まだ 'void 0'を書く方が簡単ですし、引数も避けています:P – Esailija

4

は私にとって、これは最高の作品:

emptyFunction = Function(); 

console.log(emptyFunction); // logs 'ƒ anonymous() {}' 
console.log(emptyFunction()); // logs 'undefined' 

それは私はもちろん、あなたも一定のような変数「EF」を使用することができます(変数に代入してもいないだろうととても短いのですかそう、それはですさらに短く、追加の "()"括弧は必要ありません。変数に代入するときでさえも、本当に空の関数が必要な場所であれば、 "Function()"を使用するだけで、名前を持たなくても、私の解とフレデリックの小さな動作の違いです。

0

ラムダ式を使用します。

$R.functionNull =() => void 0; 
関連する問題