0

次のような呼び出しを受け取る関数がある場合

function car_total(y) {

final_total(y);
}


function toy_total(x) {

final_total(x);
}

両方の合計が存在する場合に計算するが、1 つのパラメーターしか受け取れず、エラーをスローしない関数を作成するにはどうすればよいですか?これは可能ですか?

function final_total(x,y) {
//if passed just x
sum = x ;
//if passed just y 
sum = y;
//if passed x, y 
sum = x + y ; 

}
4

3 に答える 3

6

渡すことができる引数は 1 つだけですが、その引数がx;でなければならない引数は 1 つだけです。どの変数を「意図して」渡すかを(オブジェクトを渡さずに) 判断する方法がないためです。したがって、最初に受け取った変数は常にx、2 番目の変数y

function final_total(x,y) {
    return y ? x + y : x;
}

そして、渡された引数が 1 つだけ存在する場合、この関数はその単一の値を返すか、2 つの変数が与えられた場合、それら 2 つの合計を返します。したがって、渡されたかどうx を確認する方法がない場合でも、これは思い通りに機能します。y

ただし、 (何らかの理由で)またはのいずれか を明示的に渡す必要がある場合:x y

function final_total(values) {
    var x = values.x || 0,
        y = values.y || 0;
    return x + y;
}

var variableName1 = final_total({x : 23, y : 4});
console.log(variableName1);
// 27

var variableName2 = final_total({y : 4});
console.log(variableName2);
// 4

var variableName3 = final_total({x : 23});
console.log(variableName3);
// 23​

JS フィドルのデモ

于 2012-11-21T20:06:56.460 に答える
0

あなたが持っているように関数を定義し、引数のいずれかが null かどうかを確認できます。欠点は、呼び出すときに null を適切な場所に配置する必要があることです。

function final_total(x,y) {

    if(x && y) sum = x + y;
    else if (x) sum = x;
    else if (y) sum = y; 

}
于 2012-11-21T20:06:35.957 に答える
0
var final_total = function(x,y) { return x+(y||0); };
于 2012-11-21T20:14:14.243 に答える