1
mathOp =  function(type){
            return (
               "add" == type?  function(a,b){return a + b}
              :"mul" == type?  function(a,b){return a * b}
              :"sub" == type?  function(a,b){return a - b}
              :"div" == type?  function(a,b){return a / b}

            )
         }

Chrome JS デバッガー ツールによると: SyntaxError: Unexpected token )

この構文の何が問題になっていますか?

4

2 に答える 2

5

: else最後の部分を忘れています。

mathOp =  function(type){
            return (
               "add" == type?  function(a,b){return a + b}
              :"mul" == type?  function(a,b){return a * b}
              :"sub" == type?  function(a,b){return a - b}
              :"div" == type?  function(a,b){return a / b}
              : function() { return NaN; /* or throw an exception */ }
            )
         }

次を使用して、読みやすくすることができますswitch()

function mathOp(type) {
    switch(type) {
        case 'add': return function(a,b) { return a + b; };
        case 'mul': return function(a,b) { return a * b; };
        case 'sub': return function(a,b) { return a - b; };
        case 'div': return function(a,b) { return a / b; };
    }
}
于 2012-05-15T10:45:44.117 に答える
4

既に述べたように、: がありませんでした。

ただし、このコードを改善する別の方法があります。操作をテーブルに入れます (オブジェクトとして実装):

var ops = {
  add: function(a, b) {return a + b;},
  mul: function(a, b) {return a * b;},
  sub: function(a, b) {return a - b;},
  div: function(a, b) {return a / b;}
};

次にmathOp、テーブル ルックアップを実行し、op が見つからない場合は適切なエラー処理を行います。

function mathOp(mytype) {
    var op = ops[mytype];
    if(!op) {
        ... error-handling ...
    }
    return op;
}

これには、op 関数が呼び出されるたびに作成されるのではなく 1 回だけ作成されるという利点があり、mathOpより簡単に拡張でき、必要に応じて他の関数でテーブルを使用できます。

于 2012-05-16T00:50:26.630 に答える