1

私はこのような関数式を持っています:

var inputChecker = function(field) {
    return function() {
        if(field === '' || field === 'undefined' || field === null) {
            return false;
        }
        return true;
    }
}  

いくつかの異なる関数式で使用したい:

(function($) {
  if(inputChecker(x)) {}
})(jQuery);


(function($) {

})(jQuery);

しかし、問題は、inputChecker が体外で宣言されている場合、これらの関数式で表示されないことです。なぜだか分からない?inputChecker はグローバルであるべきではありませんか?

4

2 に答える 2

2

Dystroy の答えは間違いなく簡単です。でも自分の思い通りにしたいなら…

の戻り値はinputCheckerブール値ではなく関数です。返された関数を呼び出したい場合は、()式を使用します。

var fn = inputChecker(x); // gets the function
fn(); // calls the returned function

またはそれより短い

inputChecker(x)();

あなたのコードで

(function($) {
  if(inputChecker(x)()) {
    // custom code here if x is defined
  }
})(jQuery);

注: variable が ではないかどうかを確認する場合はundefined、アポストロフィを削除します - undefined は文字列ではなく定数です

if(field===undefined)
于 2013-06-02T19:42:13.010 に答える
2

あなたが書いたのは関数ファクトリーです。ブール値ではなく、プロパティをチェックできる関数を返します。

この種の関数は便利な場合もありますが:

  • ここでは、返された関数で、ファクトリが受け取ったプロパティの値をチェックしています。この値は変更できない (クロージャーに埋め込まれている) ため、生成された関数は true または false 以外の情報を保持しません。だから駄目です。

  • 関数ではなくブール値であるかのように inputChecker(x) を呼び出しています。

したがって、おそらくあなたが望むのは単純です

var checkInput = function(field) {
    if(field === '' || field === 'undefined' || field === null){
        return false;
    }
    return true;
}  

しかし、別の値に応じて異なるチェック関数を本当に生成したい場合は、次のような関数ファクトリ パターンを使用できます。

var x = true;
var checkInput = (function (x) {
    if (x === true) {
        return function(field) {
            if(field === '' || field === 'undefined' || field === null){
                return false;
            }
            return true;
        }
    } else {
       return function(field) {
           //evaluate field differently
       }
    }
}(x));

さて、内容に応じてx、1 つまたは別の機能が に割り当てられcheckInputます。

于 2013-06-02T19:36:11.193 に答える